Nobody cares about software design
Bad design won't get you fired, and hiring more people to deal with it might get you a raise
Check out Grokking Simplicity, my book for beginners to functional programming.
And if you want more ideas about software design and domain modeling, read the available chapters of Runnable Specifications for free online.
Nobody cares about software design
I was talking to a friend the other day who was struggling with their offering as a consultant. One of the things he was selling was software design. I told him that I had a lot of trouble selling software design, just like I had trouble selling process improvement. I suggested he try to sell the benefits of software design, like better developer productivity or decreased maintenance cost.
I brought this up to another friend, and he immediately shot me down. He had two main points:
Nobody wants to buy something that makes them incrementally better. If I tried to sell you a new car that had 20% gas mileage, would you switch cars? At most you would make a mental note to check out that car the next time you’re on the market for a car.
People buy stuff that solves an immediate personal problem, like getting fired for making bad decisions or increasing their status so they can get promoted. Even having bad software design might help them get promoted because they can justify hiring more people to manage, and the number of people under you shows your importance.
This is the best explanation for why something as valuable as software design is not easily sold. As an aside, it might also explain why small companies can outcompete large companies in software. It’s not just that the large company is slowed down by process. It’s also that the small team can create a culture of quality and delivery without the misaligned status politics.
Back to selling design. If my friend’s points are true (and I think they are), is there a way to sell design? Yes. But you have to figure out what the person with control of the money’s problems are. Ask them. Often it’s pressure to hit milestones or certain KPIs. Sometimes it’s fear of getting fired for a mishap. Get to know what keeps them up at night, and it may surprise you. Or, as has often happened with me, it’s obvious in retrospect. I had simply never stopped to see it.
Now, software design might very well be the key to what’s haunting them. For instance, if they need to hit certain milestones, you can phrase the bad design of a certain module as putting significant risk on the success of that milestone. Or if they’re under pressure to relieve the support burden, you could identify the poor design of the code for the dashboard as the culprit.
But you also might find that bad software design, as much as it is a thorn in your side as a developer, is not really the key to unlocking any of the problems of people higher than you. And that’s fine. It just means it’s only you and your team’s problem, not theirs.
And as an outside consultant, trying to sell general services like “software design”, you’re better off appealing to what could get the buyer promoted or what could get them fired. I don’t think there’s a single answer to that, but at least it’s a start while you’re looking. And, of course, starting where you’ve already found success is a good idea. Why did people buy your services before?
Rock on!
Eric