This is my summary of Michael Feathers’ “Reinventing Software Design” which was the keynote speech for day 1 of ScanDevConf 2010. Please understand that, except for the notes at the top and bottom, this post reflects the opinions of the speaker, not me.

In the last 5 to 7 years there has been a lot of talk about process and not so much about design. When you raise the profile of one issue (process) all others tend to fall by the wayside. There’s also been a lot of focus on technologies. Developers in the .NET world discover things that were known in the Java world already 3 years ago, and vice versa. Design knowledge that was around has been getting lost in the generational shift. People think that they know design, but they don’t really. The design books people read tend to be 5 years old. Where are the new books?

There’s been a kind of a “design winter” – but we’re coming out of it now.

There is also a focus on things like TDD and emergent design. But these don’t mean that design is no longer needed – they require a tacit knowledge of design.

Trends worth looking at, regarding design:

  • Software development is becoming more of an engineering discipline. We’re bumping into constraints.

    Hardware design has always been surrounded by constraints: heat, power. Software has mainly been constrained by our ability to make sense of it. No constraints means we do just about anything. We have capacity for unbounded complexity.

    Now software is beginning to run into hardware limits. Hardware is going to affect software; software will become more tightly coupled to hardware. Hardware will shape business. (Google was made possible by cheap hardware. Software that utilizes GPUs.) Hardware will lead to new business models that we haven’t even thought of yet.

  • “It’s ergonomics all the way down.” User experience design used to be thought of as something off to one side, a separate discipline, a separate community with a separate nomenclature. But what we call “software design” is really “user experience design” where we are the users. That is one of the reasons why software design often sucks: we don’t take ourselves seriously as users.

    Design guidelines are all about ergonomics. Small classes and methods are easier to read. Cohesion and coupling have a cognitive basis.

Design will grow at the pressure points of hardware and user experience.
We’re entering an era with more constraints. Constraints will drive design. Design thrives in constraints.

My opinion: Not too impressed. I can relate to Michael’s point about the links between design and user experience. But software bumping into hardware constraints? In some parts of the industry I’m sure this is true, but I believe it’s something that affects a tiny minority of developers.