Software development:
The system performs function A.
Software engineering:
The system performs function A under operating conditions B with operational performance parameters C with tolerances within the probability distribution D and reliability within the probability distribution E and we are legally responsible if it doesn’t.
As you can probably imagine, one of these problems is harder than the other. My interest is in explaining why it is still possible and even desirable to address the second problem with evolutionary design.
Agile methods can explain how to manage evolutionary design for the first problem. They have so little to say about the second problem that they almost appear to deny its existence. Software engineering methods are largely concerned with the second problem, but they usually apply a simple-minded mass production mentality to management. I guess “serious” software engineering researchers haven’t considered management to be a sufficiently interesting problem.
Maybe I’m a dreamer. I want both. In fact, I don’t think Software Engineering can be made to work without evolution. The best that a phase-gate system can hope to offer is to solve yesterday’s problem (i.e. the wrong problem) with great precision. I want the optimum solution to today’s problem, today.




Corporate Coder | 11-Nov-07 at 3:31 pm | Permalink
Even More Kanban observations (Part IV)…
As I last posted we are going ahead with our Kanban for Change tickets. The visit with David Anderson…
Eduardo Jezierski | 13-Nov-07 at 12:36 am | Permalink
Hey, I do think that a culture of acceptance testing that embraces context and operational envelopes is the way to go. Maybe, in a future, most of the effort will be in specifying the right tests, instead of building the system that will pass them….:)
Corey Ladas | 13-Nov-07 at 12:54 am | Permalink
Yes, I think you are right. In the long run, more declarative languages may become the rule.
“Computer, build me a system that satisfies the following requirements…”
…then the software developers will be the ones who are really good at writing those requirement specs.
Corey Ladas | 14-Nov-07 at 10:35 pm | Permalink
By the way, I wouldn’t want this statement to be taken as a value judgment. I’m not saying that one definition is “better” than the other, and I’m not saying that everybody ought to adopt the engineering point of view. “More convenient than doing it by hand, most of the time” is a legitimate requirement for a significant proportion of IT applications.
What I am saying is that if you have only done the first thing, that doesn’t mean the second thing doesn’t exist. It does, and the people who work at that level deserve to have effective management, too.