published at 2018-02-18
created at 2018-02-18
written by Ivan Alenko

The Hardest Thing in Software Development is Simplicity

I'm a full time software developer for 3 years now, but in total it's over 13 years now since I began to program stuff.

But still, the hardest part is simplicity. It's quite easy or at least feasible to code some system which becomes gradually complex. In the end. At the beginning it's not quite clear how it should look like.

The solution is constant refactor. You NEED to do that. Really. And write tests.

How much effort such dead simple system requires? It's all about design. Simple design with repeating patterns or common approach to a problem. And clear vision to problems we are solving.

Like using one file per component. Creating a renderer for documents which is shared among textual types of content. The renderer has private (trusted) and public (untrusted) render functions. These are just real world examples.

The point is, it takes a lot of time. If "ordinary" system takes 90% of time, the simple one takes another 450% times. Is it worth it? If a software needs to stay alive for years, be evolved and maintained, yes. You don't really have a choice.

Such system will never reach that critical mass, when every little change is painful and takes like three days. And bigger changes a month or two.

Can you do simple design straight away? Yes, if you created a solution to such problem before. Otherwise....no, not really. Experience and knowledge help a lot, because you can still use parts of design principles or behavior patterns you know. But the other half is uncharted territory and you will need to experiment and find the proper solution.

And throw away and refactor code along the way. You should definitely automate this. Static analyzers, test driven development, automatic tests, continuous integration and before you need to think how the system should behave and how users should flow the system. Empathy is the key. Imagine how users (stakeholders) use the system. Or bots, whatever.

Yeah, complexity. Such fun and tacling it is main goal of development (at least for me). I REALLY love elegant software designs.