Skip to main content

Is Software Design really Dead?


Over an interesting post by @Michele Sollecito where he maintains that software development is all design, there's been a lively conversation in the comment.

I said in one of the comments that "Design is Dead" and the provocation was picked up. Here a brief comment on why I believe so. For the long answer, I am afraid you have to wait for my paper to be in a readable draft state (and please don't crowd 😀).

Premise

  • Martin Fowler in a 2004 long article maintained that software design has changed nature and as a result it is alive though morphed into something else.

  • Jim Coplien, argues, correctly in my option, that it is wise and experience bears this out to get the structure upfront, otherwise you risk driving yourself into a corner, architecturally.

I could mention hundreds. This is to set the stage i.e. it is a fundamental debate, and it’s not settled. Unless we introduce beliefs in the mix.

Clarification: Talks of "design" abounds, they are everywhere. But if you get a bit closer, you'll notice that it's not about the design itself, but the process of design. Design thinking or agile in the context of software development are two paradigmatic examples.

Clarification: I meant that SD has been killed. But as Fowler indicates, it does not mean that there is no software design today! It’s just morphed. A simple Google search for “software design” yields ca. 30mil results.

Short answer: In the mainstream, the code is the design. At some point, this became a sort of truism, encouraged by many well-known authors, methodologists, and gurus. I didn’t buy it.

Considerations.

  • There is a general agreement that design is a set of decisions. As a result, the different design approaches propose different ways to come to a decision e.g. upfront school, emergent design, the pattern school, MDA, Design by Contract, etc. No beliefs, just options with constraints and sweet spots. That’s why it is hard to be a software designer.

  • But there is more, and that’s what I considered to be moribund. The disproportionate emphasis on the piecemeal approach, namely, you start building based on what you need now, on what you know now, and along the way the structure will be built and changed as conditions change. While it is easy to recognize that software by nature is subject to continue changes (because the environment changes, so in sense software artefacts are derivative of the environment where they are executed), it is also safe to admit that this has often led to failure to deal effectively with the “problem” so that inevitably the totality of the "problem" is not considered. In these cases, some crucial elements may be excluded from the formulation of "a solution." Furthermore, this approach may lead to little considerations to reasonable range of alternatives or perspectives.

  • There is even more (for instance the design of Concepts as the work of Daniel Jackson illustrates, or the insights in the A Software Design Manifesto by Mitchell Kapor) but hopefully it is clear by now what I mean when I say “design” is dead.

In my view we have yet to build the intellectual foundations on which the field of software design can be based. In other design disciplines and the field of HCI, design has flourished but the particular, distinctive qualities of software design have yet to be fully articulated. My point is that as an industry we are pushing this back. Unnecessarily. 

*The picture is from "Why Buildings Fall Down" book cover, by Mario Salvadori. 

Comments