DevOps Zone is brought to you in partnership with:

Larry has posted 12 posts at DZone. You can read more from them at their website. View Full User Profile

The universal theory of big software

  • submit to reddit

“Experience alone, without theory, teaches management nothing about what to do to improve quality and competitive position, nor how to do it.” W. Edwards Deming

For some people, software engineering is a solved problem and Agile methods are the solution. If a project is small enough, management enlightened enough, and customers sufficiently supportive or powerless  - in other words, if it’s an easy project - Agile is the way to go. 

But don’t stop thinking about your process:

  • Adopting Agile leaves unanswered the question of how to subsequently improve. How do you outperform the other “Agilistas” and build a firm-specific advantage in engineering? 
  • As an individual, you compete globally with engineers combining the same Agile methods with a significant cost advantage. How will you feed your kids ten years from now?
  • Software projects differ. Complex projects differ from simple ones. Web software differs from medical device firmware. When goals are different, any technique must support some better than others. To customize the process you need to combine a solid theory with intense study of your own situation.
  • Agile methods focus heavily on coding and testing and say less about things like requirements gathering and operations. It’s not possible to optimize an entire process while focusing on just one part. 
  • Agile is likely not the final advance in development methodology. Open Source, for example, is a far more radical rethinking of the means of producing software, and one with important lessons for developers. 

In manufacturing, the techniques that make up Just-in-Time (to which Agile is often compared) are less important than the realization that every aspect of the process is a control to be manipulated, coupled with a “relentless pursuit of understanding and improvement.” 

This brings to mind another lesson from Just-in-Time manufacturing, the distinction between “pragmatic” JIT - characterized by a patient and exhaustive focus “on the concrete details of the production process” - and the “quasi-mystical hyperbole” of “romantic JIT.”  Much of the writing about Agile (“People over Processes”) tends towards the romantic, making it simultaneously more appealing and less useful.  

None of this makes Agile ‘wrong’; It’s not. The problem is that too many people treat it as a recipe book and when the world asks them to improvise they’re at a loss.  They need to learn to cook, and not just follow recipes. 

Is there an alternate ‘universal theory of big software’?  I think the strands of such a theory, rooted in economics and enriched by systems dynamics and other disciplines, exist.  They’re just waiting for someone to pull them all together. 

That someone is not me.

I’m reminded of William James’s remarks on his own ground-breaking text Principles of Psychology. He called it ”a loathsome, distended, tumefied, bloated, dropsical mass, testifying to but two facts: 1st, that there is no such thing as a science of psychology, and 2nd, that WJ is an incapable.” 

In the posts that follow, I hope to produce something worthy of similar praise. I think I can, I think I can, I think I can.

Published at DZone with permission of its author, Larry White. (source)

(Note: Opinions expressed in this article and its replies are the opinions of their respective authors and not those of DZone, Inc.)



Javin Paul replied on Thu, 2011/04/28 - 9:31am

As per my experience for successful execution of any project you need a mix of different approaches , some part of project fits on agile quite well , some part of project will require iterative development and use of waterfaoll model and some will be more on its own way. Agile is a good way to start but its not something you should always stuck you got to be flexible enough to adopt any other strategy if it suits your project.

Difference between ConcurrentHashMap , Hashtable and SynchronizedMap


Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.