[wplug] open source software development methodology
Patrick Wagstrom
patrick at wagstrom.net
Wed Jun 11 13:42:46 EDT 2008
Alexandros Papadopoulos wrote:
> I assume there are a number of people on this list that have
> first-hand involvement in free software projects, so I'd appreciate
> your experiences, DO's and DONT's on the below scenario.
>
> A loose team of software developers and web 2.0 architects has been
> working on creating a web application that could be called a portal, a
> wiki, a CMS, a knowledge management system and a social networking
> tool all at once. The base layer is mediawiki, with several add-ons
> and some glue between them. Development of this suite has been
> happening in a quite close circle of people up to now, and no real
> software development methods were put in place.
>
> Now we're thinking of opening up the suite for everyone to use and
> extend. But we don't know how, from a practical standpoint. We want to
> make it as easy as possible for interested third parties to grab a
> copy of the code and run a local, independent version with minimum
> hassle, without relinquishing control of the production copy of the
> code and the stability of the main sites that sit on it (one of them
> being http://openmethodology.org).
>
> People with no serious software development experience have come
> together and drafted something like this:
>
> 1. There is the production server and the development server. Noone
> has direct access to the production server.
> 2. Developers have accounts on the development server, and access to
> some version control system that allows them to checkout and merge the
> latest changes in the code.
> 3. When a developer/contributor believes a change he/she submitted
> needs to go to the main branch (the next version of the production
> codebase), he/she notifies a team of approvers.
> 4. The approvers have access to scripts that allow the newly submitted
> code to be incorporated into the the main development site's suite.
> Thus the code is tested for deficiencies, if it breaks anything etc on
> the development copy of the web suite.
> 5. If anything breaks, the production copy of the codebase is copied
> back from the production server to the development server, thus
> undoing any changes.
> 6. If it looks good on the development server, another magic script is
> executed that copies over everything to the production server.
>
> Now, I see a lot of holes in this, but please remember it has been
> drafted by people who know next to nothing about software development.
>
> I'd appreciate your comments/thoughts on the above, and/or pointers to
> development documentation/procedures that you might have used and
> found reasonably effective.
Alex,
The people without the software engineering background may be on to
something. In my experience developing web apps, having a broken
production system is bad news, but it can be really hard to manage and test
everything. You're also trying to address creating a complete development
community, which is another question completely.
I'll address my thoughts on keeping the main server safe:
1. Make sure that EVERYTHING is versioned -- including the database. Yes,
this requires some creativity on your part, but there are various methods
for ensuring that this work. A good to do this is make sure that the
normal database user does not have modify access on the schema, and then
version everything. Jeff Atwood wrote about this a few months ago:
http://www.codinghorror.com/blog/archives/001050.html
2. Don't worry about the nuances of the different version control systems,
whether or not you should use Git, Hg, Bazaar, SVN, Visual Source Safe,
Clear Case, or CVS. Seriously, pick one that your team will use and stick
with it. It helps if this has a distinct concept of a trunk and makes
branching easy. For our system we use git which means that each user has
their own trunk. We also have a "development" and "production" trunk. We
cherrypick revisions from development into production. The production is
always then updated from the git tree so we can roll back at a moments notice.
3. ReviewBoard is your friend. Great little piece of software.
4. BuildBot is also your friend. Most web systems don't have traditional
buildscripts -- but you can unittest the heck out of them.
5. Selenium is great for testing Web Apps
With regards to allowing other people to get invovled, there is one key
piece of advice. Give up control. Communities that hold their code to
themselves without giving it loose. OpenSolaris and OpenOffice are great
examples of failed communities. GCC is a similar case in that if you
submit a patch to the core it's basically never going to get implemented,
they only allow innovations at the edges. Eclipse, Apache, and Python do
great jobs of allowing people to contribute to the core, because they
realize that they need to give up some of the control. Want another
example? Witness the change in Ubuntu as it has had more rigid process
installed, vs Fedora which has loosened up.
Anyway, hope some of this helps.
--Patrick
More information about the wplug
mailing list