The one sure way to advance software engineering
bertrandmeyer.com
bertrandmeyer.com
This is his conclusion, and it's bullshit. Most software engineering failures result from the violation of known principles; basically, calculated risk-taking in a cost-sensitive industry where lives (usually) aren't at stake. Accumulating more and more engineering knowledge won't change that.
Really, just open your ears on any software engineering project and you'll hear that "accepted principles" are routinely ignored. A month ago I heard someone say, quite upset, "We're supposed to be in testing right now, but we're still in development!" because QA uncovered a bunch of bugs that needed to be fixed by developers. Clearly that person sees testing as a joke, a pious fraud, that isn't actually supposed to catch any bugs. Usually most bugs missed in development are released to production and fixed later. Catching more bugs than usual in QA, thanks to an enthusiastic and zealous QA engineer, was a blow to the schedule and will probably result in the project being perceived less favorably than if QA had done a sloppy job. Bertrand Meyer is kidding himself if he thinks engineering knowledge is the cure for this kind of disease.
EDIT: Stepping back, I guess the cost and embarrassment of a mandatory investigation would serve as a deterrent. But the knowledge gleaned from such investigations would be depressingly mundane.
I could imagine such a law applying only to software projects funded with public money, though. There are enough of those to advance the state of knowledge a fair amount....
One step in a direction does not always lead to the next, especially if there are definite plans at the beginning to avoid it.
Perhaps, but choreographing 50 million people (plus or minus an arbitrary number, depending on your country) is pretty tough, even on a good day.
Still, there are ways of dealing with slippery slopes. Knowing that something is a slippery slope means "approach with caution" not "stop".
For details see http://en.wikipedia.org/wiki/Mariner_1 or http://catless.ncl.ac.uk/Risks/5.65.html#subj1 for more details. Here is a summary. The Mariner 1 probe was destroyed because it veered off course shortly after launch on July 22, 1963. By July 28 the NY Times was reporting that the cause was due to a missing hyphen. NASA submitted a report to Congress the next year that confirms this.
The comma vs period version likely arose as a misremembering of which typo caused the problem. Or possibly by confusing it with another incident. (There are anecdotal reports of such a bug being caught in Project Mercury. Whether they are true is a different story.)
After a plane crash, I'm pretty sure that software errors would be investigated along with everything else. How has that worked out for software?
Even then, the eurofighter turned out to be more capable than both the F-22 and F-35.
I can't imagine trying to use that when in the high stress situation of combat.
Airplanes have been solving the same basic problem for decades, getting incrementally better at it year by year. A flight simulator running on a desktop computer is one example of one piece of software that could get incrementally better year by year. Meanwhile new software solving new problems is released all the time. Designing laws to account for that is difficult and very dangerous.
The FAA model might work well for specific software systems but is no silver bullet.
Not really that far. The tools are already there, and available to use. We just have to gain a culture of quality.
Which is the real problem. The technology industry has a culture of cowboys and constantly forging ahead rather than sober introspection (masturbatory blog posts aside).
My background in aviation has had a huge effect on my life in technology. Every pilot has been in a "situation" over their flying career, some more than once. When we do our hanger flying we swap stories about how to safely get down every time. This just doesn't happen in technology. It should.
For me, if my banks software decides to munge some data, that's not cool. If my $2K laptop crashes, that's not cool.
More importantly, a culture of quality mainly has initial costs, after that maintaining it is a small marginal cost with significant savings in reduced defects.
The cost (both financial and human) of an aviation failure far exceeds the cost of your laptop crashing.
For most things, though, that's just plain unnecessary. If my free web browser crashes - well, I'm a little annoyed, but I suck it up and restart the program. And I'd much rather use that free browser that crashes than wait until they can make it perfect and crash-free.
There's an opportunity cost to everything. Time spent making sure your program never crashes is time not spent on solving new problems, and it's likely those new problems are a lot more pressing than "I need to reboot Firefox every 2-3 days because it has such horrible memory leaks."
This to me is unprofessional. We have the technology and skills to build reliable software, without significant additional cost. To do anything else should be criminal.
I'll use an analogy. You wouldn't date a fat, ugly, dull girl if you knew with even the most trivial effort you could date an attractive girl who's great at conversation and loves to discuss René Magritte and Douglas Hofstadter, would you? No. So why accept the same in software?
EDIT: I should note that here in B.C., Canada Software Engineer is a certified title. You may not legally call yourself a software engineer unless you are licensed.
I'd strongly disagree that building reliable software can be done without significant additional cost. I spend perhaps 2/3 of my time writing tests, and then development time (on top of that) is probably doubled by code reviews. The benefit of this is that I have enough confidence in my (and others') code that I can freely improve it without worrying too much about breaking things. The downside is that I've spent 6x as long to implement a feature as I otherwise would've. That's a cost. I pay it because a.) I have to and b.) the business importance of the code I write really does justify it.
I would not pay that cost if I were hacking up a startup with zero users and iterating until I had a useful product. And I don't pay the cost when I'm prototyping new ideas within my employer - most of my work later this week has been straight hackety-hack with no tests, because I'm doing a demo for something new.
"You wouldn't date a fat, ugly, dull girl if you knew with even the most trivial effort you could date an attractive girl who's great at conversation and loves to discuss René Magritte and Douglas Hofstadter, would you?"
Haven't you heard of "Smart. Pretty. Nice. Pick two"? You generally can't have everything - not unless you happen to be a debonaire billionaire with Brad Pitt's body. (The fact that such a person doesn't exist might be further evidence that you can't have everything...) Most people date a girl who has the qualities that they care about, and they don't worry so much if she's not perfect in other ways.
He's saying that good software available today for $X beats flawless software available in 3 years for $5X, and I agree even if X=0. With the obvious exceptions for scenarios where people will die if it goes wrong.
This to me is unprofessional. We have the technology and skills to build reliable software, without significant additional cost.
And for some reason every organization in the world declines to use this magic bullet.