As many of you know that have viewed and consumed my writings over the years, I have some very specific ideas about software development and delivery. If you watched my latest blog on The Great Methodology Paradox, you know that I’m not a huge fan of the agile approach or the Lean-Agile approach as the beat-all, end-all, of project methodologies. At the end of the day, people are what make projects succeed; the process is only an overlay, in my opinion.
However, I know all of us have talked to that one developer that states something like:
Me: So what does the Application do?
Developer: Well we are using the latest in database technology with a backend that is supported by Oracle using the most current release and we are fronting that database with Cassandra because we needed “big-data” and we will need well over 1,000,000 writes per-second. Heck, we helped Apache debug the product because we needed to work. Then we have it tied together with the latest Spring server using the latest JDK 7 and we even support the new Java project Coin because we needed the enhanced Exception handling process, and using the latest in both whitebox and blackbox testing methodologies for zero regressions. Plus, as you can imagine we are using the latest in browser technology for the front-end, because we believe in HTML 5 and we are so cutting edge. Of course this is using the latest Jira for issue management, and we are using the latest in UML for internal documentation and explanation to management, it is the bomb!
Me: Again, what does the application do?
Developer: It calculates interest on used car prices on a general loan as an estimator.
Me: How many calculations can it do?
Developer: Well, right now it is not working…
As most of you know the only thing in my book that matters when it comes to software is that it works! Period! That is it, nothing else, if it doesn’t work, it is useless.
When training new developers I will ask that question; “what is the most important thing the software you are writing must do or have?”
The answers are staggering; good comments, great requirements, good architecture, clean code, object-oriented, java, Delphi, x-language(s), must have unit testing, must have audits, metrics, must be optimized, and the list goes on and on and on.
Nobody ever says: It has to work! Actually they usually say everything but that, so I was overjoyed today to read in my latest IEEE Software magazine (Jan/Feb 2012) issue that one of the people I have followed in my career stated the same thing. The great article is “The Professional Architect” written by Grady Booch, where he states in context:
“This may sound like heresy, but for each of these [medical] systems, the raw, running, naked code is the most important artifact. Everything else – models, requirements documents, test cases, you name it – is secondary or even tertiary.”
He does go on to say that those extra things help manage the project and can help the developers develop better code, but the most important thing is that the code that we produce, works.
On one hand I’m glad to have a “heavy hitter” like Grady coming to the same conclusion I came to many years back, but I’m sad at the way he had to come to realize it. You will need to find that article and read it, but it may have taken death to stare him in the face before he realized the ultimate truth of what we do when creating software and what the ultimate need really is.
That software must work!
I’m sure we have all met this developer:
Me: Whatcha doing?
Developer: I hacked together this quick Apache module that calculates the interest on used car prices for a general loan estimator.
Me: How does it work?
Developer: It’s working. Our site is being hit by about 10,000 hits per minute and it seems to be holding up. Maybe in the next release we will give the option to do different types of loans, but we will see, users seem happy with it.
More to come…