Fog Creek Software
Discussion Board

Good software takes three tries

I have another "law": It takes three tries to create good software.

1st try: make it work

2nd try: learn from the 1st try and make it better

3rd try: you've finally learned enough to make it right

I've seen this in myself, in teams I've been in, and elsewhere.

Should be working
Friday, July 2, 2004

Sounds like Brooks.  "Plan on throwing the first one away" (paraphrase).  In the anniversary edition of MMM he says he no longer follows that philosophy.

Friday, July 2, 2004

My software always works as perfectly the first time.

Of course, it goes without saying that I am much smarter than you or anyone you've ever worked with.

Mr. Fancypants
Friday, July 2, 2004

PS.  I put that typo ("as perfectly") in there simply to display a little humility in my post.  It was intentional. 

I am much smarter than you or anyone you've ever worked with.

Mr. Fancypants
Friday, July 2, 2004

I'd tend to agree. The only problem is the corrolary: By the time you've finished the third one, the marketplace (or user needs, or whatever) have changed... :-)

John C.
Friday, July 2, 2004

I used to agree, until I stopped doing big design. I don't agree with that any more, and my disagreement actually goes both ways.

First, any code that works is "right enough for now".

Second, code never stops changing. It always gets incrementally better, so even the third time you're touching the code, it's not finished.

Brad Wilson (
Friday, July 2, 2004

"My software always works as perfectly the first time."

There's the matter of "working perfectly" (i.e., without bugs).  Then there's the matter of being "designed perfectly."

Even if you had your application "working perfectly" the first time (and you don't, though I know you were kidding), it's still going to take a few iterations to improve the design.  And even then the design won't be "perfect"; it will at that point hopefully work well for the majority of users and be okay for the rest.

Herbert Sitz
Friday, July 2, 2004

Yeah, I agree with this:

Version 1 - Unusable, for all practical purposes
Version 2 - Usable, with workarounds and manual intervention
Version 3 - Works fairly well, a good product/service
Version 4 - Works really well, let's you do things not only more efficiently, but that you just couldn't have done without it

I also like Joel's 10 years rule of thumb and wonder what it means for the future of open source software like OpenOffice or the Linux Desktop Environment.  If Windows/Office have hit their 10 year plateau, do the open source alternatives catch up in say the next 3-5 years and the what?  Looks like the Mozilla browser has just effectively caught up with IE for example.

Stray Reader
Friday, July 2, 2004

It's the law of the three systems of man.

It is explained in "Linux and the Unix Philosophy"

ISBN: 1555582737

Flax, oil, corn, computer programmers - all commodities
Friday, July 2, 2004

> It always gets incrementally better

Or incrementally worse depending on various factors.

Friday, July 2, 2004

The less you try to make each iteration good, the more iterations it will ultimately take to make the software good. So just because you might plan to throw the first one away, don't fall into the trap of not trying to make it as good as possible. I'm sure there are plenty of XP teams out there that make this mistake.

Friday, July 2, 2004

> I am much smarter than you or anyone you've ever worked with.

That's amusing.  I know how not to end a sentence with a preposition, yet you do not.

Capn' Kirk
Friday, July 2, 2004

If it takes you 3 tries to develop good software, you don't understand what you're trying to do.  But on most teams, there are a few people who just don't give a crap.

So you're probably right.  If you have a good team, 2 tries.  If you have a sucky team, 3+ tries, or never.

Friday, July 2, 2004

So what should that be then - I'm smarter than anybody with whom you've ever worked?

Doesn't quite roll off the tounge the same way

Friday, July 2, 2004

Wasn't it Churchill who dismissed the sentence-ending-with-a-preposition nonsense thus: "That is something up with which I shall not put!"

Fowler's or any other halfway decent book on English grammar will tell you that the "don't end sentences with a preposition" rule is a canard, much like "don't split infinitives".

John C.
Friday, July 2, 2004

The problem that I have always run into (Brooks mentions this too) is that my "prototype" quickly becomes version 1.0

Then, I end up having to support my kludges that were implemented "just to make it work".

With my current project (in direct competition with another developer's system), I've taken it a bit slower and although I have less functionality at this point, I have zero bug reports while he is getting them faster than he can kill them.  Even on core functionality...

Saturday, July 3, 2004

"I am much smarter than you or anyone you've ever worked with."

That's possible.  Statistically it's very highly unlikely, but possible.

Aaron F Stanton
Saturday, July 3, 2004

Version 1 - Doesn't work. (Hope customer doesn't notice)
Version 2 - Still doesn't work. (Question Customer’s competence for not understanding the workaround)
Version 3 - Works (just about)
Version 4 - Fix bugs (introduced in Version 3)

Ian H.
Saturday, July 3, 2004

"If Windows/Office have hit their 10 year platuea"

Who said that they PLATEAU after 10 years? I thought it just took 10 years to get it right. That doesn't mean the program can't improve. It could get dramatically better. It's just that it took 10 years to get the feature set right.

BTW, I disagree with 10 years. I think VERSIONS is a better metric b/c it takes ITERATIONS.  We got it right in about 5 iterations, but we did each iteration in about 4 months or so.

Mr. Analogy
Sunday, July 4, 2004

Software Development and Web Development depends on Deticated minds with brains --- Software and Web Development and Hosting

Unovoid Vijay Saki
Thursday, July 22, 2004

*  Recent Topics

*  Fog Creek Home