Innovation in Software

Vagueware

You are reading a blog - Innovation in Software - no longer under active maintenance. These pages are kept here for archive purposes. If you wish to find out more about Vagueware please read our current website which will include links to the new blogs when live.

Death of Software Engineering Prematurely Announced

with 4 comments

[Up-front Disclaimer: I didn't do Computer Science at University. I did "Software Engineering". It involved formal methods and quite a lot of Z notation. I have some pretty strong views on Software Engineering as a discipline as a result. Most of my CompSci colleagues generally do not share my beliefs.]

Johannes Ernst posted yesterday a pointer to an article from IEEE Software by Tom DeMarco, pronouncing Software Engineering as “an idea whose time has come and gone”. Tom’s argument can basically be summed up as:

[...] you need to distinguish between two drastically different kinds of projects:

  • Project A will eventually cost about a million dollars and produce value of around $1.1 million
  • Project B will eventually cost about a million dollars and produce value of more than $50 million

What’s immediately apparent is that control is really important for Project A but almost not at all important for Project B. This leads us to the odd conclusion that strict control is something that matters a lot on relatively useless projects and much less on useful projects. It suggests that the more you focus on control, the more likely you’re working on a project that’s striving to deliver something of relatively minor value.

To my mind, the question that’s much more important than how to control a software project is, why on earth are we doing so many projects that deliver such marginal value?

Can I really be saying that it’s OK to run projects without control or with relatively little control? Almost. I’m suggesting that first we need to select projects where precise control won’t matter so much. Then we need to reduce our expectations for exactly how much we’re going to be able to control them, no matter how assiduously we apply ourselves to control.”

Frankly, I can’t believe such a narrow and misguided argument has come from the pen of Tom DeMarco.

Imagine if you will the next time I go into tender on a project.

Customer: So how much will this project cost to deliver, and how long will it take?
Me: Well, how much value is it going to add to your business?
Customer: Pardon?
Me: Is it going to add a little bit of value to your business, or a lot?
Customer: A lot, I expect.
Me: In that case, I have no idea. Let’s just roll with it and see where it goes, eh?

I’m not convinced that’ll go down well.

There are a few logical mistakes in Tom’s argument (and I can’t believe I’m having to point them out), that basically means he’s talking a great big pile of crap:

  1. We can not assess the true value of software until it is shipped.

    We might be able to sense the potential value, but it’s a guess.

    I have one project on my books now with a mid-sized build budget, potential value in the hundreds of millions. Another project for a smaller build budget with a potential value of £200k-£300k. Another project with a tiny build budget that if it goes viral could be worth billions five years from now.

    Or maybe the project with the tiny build budget sinks, the medium project gets on NASDAQ in 5 years and the biggest project eeks out a living but never goes stellar.

    We simply don’t know. We can’t know. We’re guessing. There are too many variables outside of the software engineering process to be able to assess the potential value accurately.

    In essence, we have to treat all projects as being potentially of very high value, because they all are.

  2. Value is potentially nearly unlimited, budgets are not.

    It might be well and dandy to say that it doesn’t matter if the budget might slip because the value is so high, but budgets are fixed.

    Thousands of software builds are being worked on right now where a 5% budget slip is potentially going to kill the project because there just isn’t more money after the budget is gone, and without being feature-complete the software is going to have near-zero value.

    Yes, incremental development is the way to do things, yes we should be able to stop and ship after each day’s work. However to fulfil the project’s objectives (and maximise its potential returnable value), we must aim to get all the features in to the final build within budget.

  3. There are other factors beyond budget, schedule and value to control.

    John Glenn once quipped about being sat on the launchpad, “I felt about as good as anybody would, sitting in a capsule on top of a rocket that were both built by the lowest bidder.

    However, whilst budget was important, he shouldn’t have felt in danger: the political ramifications of a death would have meant that the people who built that rocket and capsule were going to make sure he survived.

    And some software systems are the same. What is the “value” of a nuclear power station control system? Or the control systems in a fly-by-wire aircraft? Do we care more about the financial value or the safety value? I would suggest that controlling the build – engineering the build – in these situations is critical because the safety value is very high.

    In fact, it betrays immediately the fallacy of Tom’s that only the marginal projects need tight controlling – if you’re not controlling the processes around a software build that keeps 400 souls alive at 35,000 feet, you really should be in another profession.

There is a lot of cruft in software engineering. Waterfall methodologies are now considered almost laughable. However, it’s a young discipline and we have barely begun to understand the correct way to engineer software.

Agile philosophies are taking over in development shops because it allows for less process, more communication and ultimately better software being produced at the other end.

Behaviour-Driven and Test-Driven Development methodologies are providing useful benefits to our clients in a way we could barely imagine just a couple of years ago. In certain situations, formal methods and algebraic proofs are confirming that software is “correct” and “complete” in such a way we can literally bet our lives on it.

Tom admits himself he’s not on the front-line of software development these days. Perhaps his metric-centric universe is correctly condemned, but most of us aren’t using those methods anyway. We’re looking at perhaps a few numbers instead: test coverage, remaining days in budget/schedule, remaining features to be implemented. We’ve moved on. Perhaps he just doesn’t get what we’re doing in dev shops these days.

And we’re still learning new techniques, new ways of doing less process, more quality software. Software Engineering is definitely not something that has “come and gone”: it has barely got its foot in the door.

Towards the end though, Tom does make one point I can’t agree with more:

Consistency and predictibility are still desirable, but they haven’t ever been the most important things. For the past 40 years, for example, we’ve tortured ourselves over our inability to finish a software project on time and on budget. But as I hinted earlier, this never should have been the supreme goal. The more important goal is transformation, creating software that changes the world or that transforms a company or how it does business.

This reminded me of a talk given by Ted Nelson at OpenTech 2005 where at one point he almost screamed:

I didn’t get into computers to automate trivial crap! I got into it to change the World!

Didn’t we all? But I think we can do it without having to just free-ride our way along with our fingers crossed, hoping we don’t run out of money.

Written by Paul Robinson

July 20th, 2009 at 2:13 pm

4 Responses to 'Death of Software Engineering Prematurely Announced'

Subscribe to comments with RSS or TrackBack to 'Death of Software Engineering Prematurely Announced'.

  1. It’s tricky though. I still think development is a craft, and TDD/TATF are becoming what craftspeople *do* in order to get stuff done and know they are working on the right problem, plus the Z-notation stuff, which I read about but never studied in depth allows them to have some confidence that their tools are complete. (Don’t forget Gödel though – what happens when parallel lines can meet, or the software equivalent?)

    I’m also happy to automate “trivial crap” if it means my clients can make money and therefore afford my services. I get a hell of a kick out of removing drudgery from people’s lives, even if it seems “easy” to do it. Human beings were meant for more than dull repetitive tasks, more than being “resources”, and I like being part of removing that from our lives.

    I also think the small viral stuff won’t stay that way if it works – the effort will go into scaling it and making it broad, rather than making the original idea fly enough to be used. The cost is downstream and much bigger than the initial dev budget. Beauty is, if it doesn’t work you’ve lost nothing.

    Maybe the metrics have changed and are now under the control of people who know what they mean, rather than old-style metrics that measured no more than the “management’s” ability to write poor specifications and draw graphs in Excel that said nothing. I remember seeing a graph on one of my first contracts of “completed tests” – very funny – there was no code coverage metric. Even back in ‘97 it looked wrong.

    Like the new template, too, Paul.

    Francis Fish

    20 Jul 09 at 15:06

  2. ‘97 – bah, I meant ‘92!

    Francis Fish

    20 Jul 09 at 15:43

  3. Personally I think biggest issue with software development in general is the constant return back to fundamentals for each project we all start.

    In engineering when you build a bridge, you measure things like how long the gap is, what the ground underneath it is like, how much weight it needs to support, then essentially look up a pre-defined series of rules which produce a bridge that looks much like any other bridge out there which covers a similar gap.

    In software development after gathering the requirements, to use the bridge analogy, we’d start with deciding which brand of concrete mix to use, and whether we needed to make our own unique mix from base materials. Then we’d ignore any similar bridges because they were built 3 years ago and we’ve got a whole new colour of concrete now which looks much nicer, but doesn’t really change anything else.

    I think there’s either 2 ways to look at it, either the fundamental tools of software development are changing so fast that standardising on one for more than a year or 2 would cripple your productivity, or that software development tools are now at a pretty good standard and we should essentially pick one now to run with for the next 5 to 10 years, which would give us the time to develop a true set of fundamentals to build our applications on top of.

    Personally, I think the latter is more true than the former, software development tools are pretty good now and whether you pick Visual Studio and C#, or Eclipse and Java, or Ruby on Rails, people should really be standardising on one single set of flexible tools to build all their applications on.

    Ewan

    21 Jul 09 at 11:01

  4. First time I’ve seen Z mentioned in a very long time, I seem to recall the CompSci lot doing it as well at my Uni, although it is perhaps telling that only two of us graduated with Software Engineering and over a hundred for CompSci – I’ve only a vague idea why.

    Disclaimer: I’ve only just read the article because I’ve been on holiday, so I haven’t really digested it fully.

    It is definitely a strange article, on the one hand the cynic in me is wondering how long before Tom’s next book is out, and on the other hand I can’t help but wonder if he would even ponder suggesting the same approach to real-time safety critical systems? I do agree that on-time and on-budget are not always the most important things, at least in an ideal world (my personal preference would be correctness and quality), but I’m sure many businesses would not see it that way in the real world. If I were to suggest you give me some amount of money over $1 and I’ll give you $50 then I guess you’re going to give me $1.01. In the same way, you aren’t getting $50M in value if you have no interest in minimising (within reason) the cost of development. Mention of GoogleEarth and Wikipedia suggest to me that he really isn’t talking about Software Engineering at all, rather that non-engineered projects can change the world, but nothing using SE practice does – which I believe is a fallacy. I’m happy enough that Wikipedia may have been developed by one guy in his bedroom somewhere, not so much for surgical robots, military drones or the ABS in my car.

    To a point I agree with Ewan above, OO was supposed to be one of those fundamentals (and non-tool specific), but in general there is too little focus on composition within object models for this to be a starting point – especially if like a lot of developers you work under arbitrary time constraints, I think we’ve all had some code we would love to have re-used if somebody somewhere hadn’t decided that this piece of code would only take an hour or so :( Luckily I’m no longer naive enough to think that “You come back and address it later” is anything more than a means of getting me to shut up :)

    One thing we have gained from this article though, more people know who Tom DeMarco is now and people are actually discussing Software Engineering again .. which can only be a good thing whatever the eventual outcome.

    Ross

    22 Jul 09 at 11:28