Is there anything *enjoyable* about our development process?
Chris Shoemaker
c.shoemaker at cox.net
Sun Oct 16 15:25:51 EDT 2005
On Sun, Oct 16, 2005 at 11:34:24AM +0100, Neil Williams wrote:
<snip>
> >
> > You're right, this is HUGE. There's enough pain in the codebase
> > itself, but much of the pain is in code management. We *have* to fix
> > this somehow.
>
> Let's take an example or two and see if I can draw Josh's arguments in line
> with mine and yours.
>
> Example 1:
> Currently, the business file backend is broken. /tmp/gnucash.trace confirms
> this. I have a fix that completely solves the problem. I cannot commit. Why?
>
> Even though my patch does not affect ANY of the files that have been patched
> since I last committed, I have to test TWO separate builds. I have to build a
> pristine copy from CVS prior to putting my changes into that. I also have to
> build my working copy that now needs to be updated with the latest changes
> from CVS. This process has currently taken FOUR DAYS due to employment
> commitments.
>
> If I could simply commit the change, everyone would benefit.
>
> Example 2:
> I have a situation similar to yours with patches outside the tree (actually
> it's a complete tree outside the tree). This tree works with external QOF and
> I want to be able to commit these changes too.
>
> Unfortunately, that will require maybe FOUR complete builds going back to make
> distclean in each case - just because of the negative feedback.
>
> This is wasting my time, it is delaying others and it is all out of fear.
>
> Fear is not fun. As a volunteer, fear undermines my motivation to make changes
> - ANY changes - it erodes the time I have available for working on the code.
>
> However, the most difficult aspect is that it HIDES my changes from everyone
> else. Nobody else knows what I am about to change or how it relates to their
> changes.
Of all the bad things you listed, all the fear and pain, *this* one
has the worst effect on GC's development. You'd think there was some
law preventing us from sharing code. I cannot overstate how
inefficient it is to develop in isolation. It's worse than having to
build on three platforms before every commit.
> So I have to spend MORE time writing complex emails to the list that
> try to explain new code that is not itself available for others to inspect.
>
> A picture is worth a thousand words? A commit is worth 20kb of email
> description!
>
> 5 seconds compared to several hours.
>
> This is ALL because the current version control system relies on the final
> arbiter being a single directory on a single machine: cvs.gnucash.org.
Unfortunately, you're right.
>
> I need to be able to make smaller commits that change fewer files in one go,
> that require less time building pointless trees and which are available for
> *inspection* by others WITHOUT necessarily having to be IN their build.
>
> That is a decentralised model - there is no single arbiter, no single source.
> It's almost like a branch per developer.
>
> Each branch is folded into the others *when it is ready* but not before. Yet
> it remains available for others to inspect and use if they want it.
This is key.
>
> *We should not have to have patches outside the tree!*
>
> *Breaking the build cannot be allowed to remain a capital offence!*
>
> We need to ditch the idea that there is a sacrosanct single build. The release
> is built from those branches that work together. Hiding code in local builds
> is enforced by the negative feedback and implicit mantras - I thought free
> software was about sharing code, not hiding it in fear.
>
> I believe that the current development mantras in gnucash are wrong, not
> because the *ideals* are wrong but because the implementation forces
> constraints on those ideals that make the whole process overtly negative.
>
> "Breaking the build" is only a problem because we have a single build
> directory on a single server.
>
> Our bigger problem is that this weakness in our implementation is actively
> discouraging development, wasting immense amounts of developer time and -
> fatally - putting developers in fear of change.
I think you're right. :(
>
> Why am I prevented from merely fixing the problem?
>
> Why this emphasis on wasting time building trees over and over and over and
> over again?
>
> > Any enviroment
> > that makes you dread and delay committing is pretty much the exact
> > polar opposite of the goal set forth in the article. I have to say, I
> > think *this* is the root symptom. If we can fix this, everything else
> > will folow.
>
> Code needs to be shared - including broken, in-progress, code. Making changes
> in gnucash can be a LONG process and an involved, complex task. During that
> process, it is essential that others can SEE how those changes are
> progressing.
I couldn't agree more.
>
> Currently I only have two options to do that:
>
> 1. Commit and be damned, or
>
> 2. Waste vast amounts of eeryone's time trying to explain code in emails to
> the list when it would be far simpler for everyone if they could just look at
> the code!
>
> So, generally, I commit and be damned.
>
> That is actually preferable to spending even more time on a development thread
> that made a bad assumption at the start.
>
> I choose to write free software because it CAN be peer-reviewed. Our problem
> is that our peer review process is crippled, overtly negative, paranoid and
> prohibits change.
>
> I am also aware that my own arguments here are working against a change to SVN
> and a move to something like GNUarch - despite my previous experience with
> it.
I've been looking at distributed SCMs recently and there seems to be
several options, with Arch not being particularly outstanding in terms
of popularity, features, maturity, friendliness, etc.
-chris
More information about the gnucash-devel
mailing list