Software design

This category contains 35 posts

Plan for legacy systems

The other day I was looking at some old Elm code, refamiliarising myself with one of the key language concepts (Signals) and found an article to help me. One part in particular caught my eye: To truly add a level of responsive interactivity to our application, we need to understand Signals, Mailboxes, and Addresses. These … Continue reading

Deploy first, build after

There’s a lesson I learned a long time ago, and which I still find useful: deploy first, build after. Many years ago, when I was working with Mat Wall, we were building a system which, er, did something. I can’t remember exactly what it was, but I think it probably involved an FTP server, which … Continue reading


In the tech industry we’re reasonably good at capturing needs. Sometimes we skip the needs (or assume them) and go straight to requirements. That’s not great, but the intention is roughly the same: an expression of what (we believe) people need. We even have people for whom this is a significant part of their job. … Continue reading

The benefits of timeboxing a solution

A colleague pointed me to a nice article by Sue Davis about writing for the public, and among the suggestions was the idea of timeboxing feedback: “If you don’t, the polishing process can be never-ending and you risk delaying getting the content to your users.” Timeboxing is really valuable not just for getting feedback, but … Continue reading

Discovering the Elm language

Are you looking for a better front-end coding experience? I’ve just spent several weeks completing my first project with the Elm language. This is my experience. (Spoiler alert: It’s pretty positive.) Background I’m a hobbyist coder. I work with software developers as my day job and envy their skill and dedication; I can sit down … Continue reading

Technical bankruptcy

Lukas Oberhuber, CTO of Simply Business, has surfaced a term I think a lot of people will find hugely useful, and which really should be used more widely: technical bankruptcy. He introduces it in a presentation seen on Skills Matter, but also elsewhere. And it’s used to solve a very important problem: How to explain … Continue reading

Keeping up to date aggressively

A software developer friend of mine has good advice, which he repeats solemnly: “You have to keep up to date aggressively .” I agree. He is specifically talking about software libraries and platforms. If you don’t keep up to date with minor releases that come out then the changes you need to make for the … Continue reading

Past and future problems of solutionizing

Most tech people I know agree that solutionizing is a bad thing. This is when the non-technical “customer” (a project manager, a product owner) tries to specify the technical solution for the development team. They may sketch out the architecture, specify how files need to be parsed, or (in extreme cases) detail extensions to the … Continue reading

Have you designed for delivery?

Your software may be designed to work. But is it designed to be delivered? That may sound like an odd question (“Why wouldn’t it be?”) but I’ve been involved in plenty of projects where the delivery process (release, operationalisation, etc) is long and laboured. The reason is in the design. We can design for may … Continue reading

Choosing a technology because it’s popular

In the ideal world a technology will be selected on its own merits alone. But we don’t live in an ideal world, and every technology has to work in a specific situation. So sometimes choosing a technology because lots of other people did, too, isn’t such a bad idea. Some time ago I worked with … Continue reading