Simple solutions – The onion principle

I will explain to you, how you build your solution smart, clean and simple, stay on track and maximize your profit and quality.

These days there are thousands of software tools and solutions as well as frameworks or other plattforms, that may send you to the moon and back. The big problem is how to find the appropriate button to do so.

As an example I will use a simulation game where you can build houses with different functionalities and provide several goods to your people.
This game really exists, it is called Banished. I am very impressed on how one single person can build such an application, that is so simple and proper and yet very popular.

Word domination

It starts with an idea in the head of e.g. a developer.
This is the first problem. Often it never finds its way to the paper, to be able to review and improve the concept.
In the example this was the plain idea to build the game and what it could include.

Then they start to implement directly. There is that point, they may realize, that they could have done, built or used something first, to simplify the work. So they start to do or implement that something. But to do so, there might again be something helpful.
After a while, you have thounsands of started but not finished parts in your software.
When you compare it to the game, it was the fact that for the development you need something to visualize the current state of the game.  So you start to implement the graphical engine of the game bevore you finished the first part of the business logic. You find, that it might be quite esiear to have an engine first. So you download, buy or build one. Then you find, that you have a lot of houses, that have a very similar apperance, so you build an editor to design them.
Now you have already four started parts: The logic of the game, the engine which is not yet fully integrated, the user interface it self and the editor.

You may find that this is a very extreme example. But believe me, this is what happens to most software developers, when they enter the businees and start their first private project.
Of course they learn from it, so next time they may do it better. But the schemata stay the same.
It is also the missing project management that leads to this behavior. But the important part – or the part that is under the hand of the developer – is the missing methodology.

The next thing is that they add a lot of functions (or “requirements”) while working, just because they they think it might be nice for the user to have it.
In the game this could be, that you find it would be nice, when food production depends on having seeds first, which requires a special profession. So before you implemented the simple desire of food, you start to implement that seed functionality.

Build a simple solution

Now this is the concept, how you avoid these problems and further to be able to finish the project with hopefully less cost than planned. I call it the onion principle.

You build your solution like an onion. Which does not only include the structure of the solution, but also the procedure when you build it.From simple to extensive like an onion

Start with a very small and simple part. That is the basis of your system.
This means, you build the first and most important part of your application, the most inner ring of the onion.

In our example it is the fact that there are persons and they need goods as one entire group (you can also start with one explicit example like food).
Of course it can be required, to have any visualization, to see, wether your logic works proper. But it is not yet required, to do it with a map or something that already looks like the end game. A simple list of produced versus consumed goods is enough.

Sometimes it is not so easy to figure out, which part is the most important one.
If you strugle, ask your self, what is the very first desire of the customer? What is the thing, why the customer started to think about the project?
And forghet about things, that would be required to have, otherwise nobody would use it.
Of course – in the game example – nobody would use it, when there is just this list. But that is not the question. The fact is, that they could  use it and it is the key of your game. The reason why you build it.

The conditions

From there you add ring by ring to the onion. The key to do that, is to keep these rings as small as possible.
The only condition of the rings is, that after building one, you “complete a state of the process or workflow” with it. This means, that the whole application is in the next enclosed and working state.
But it might still have things, you must not do or your application will crash. Such as exeeding the maximum amount of produced or consumed goods. As this could be your next ring to add a validation.

How you decide whether it is a completed phase or state, is, that you ask your self, “Is this a result, which I can present to the customer?“.
It is absolutely allowed to tell him that he must not exceed the limit of production, or the application will crash. It is just required that the customer knows how to use it and what he might not do.


There are several reasons why you use this concept.

First of all, you always complete single steps. As these are small, you always have a working result. You may show your progress to the stakeholders. This has the benefit that the progress and success of quality, cost and deadline are traceable, so you have a better forecast and less risks.
When demonstrating it to the customer, you may also get a feedback, whether or not you are on the right way and what is missing in that part. In short, you are closer to the customers desires.

Now my experience is, that you may also feel, when the customer is completely satisfied. That means, at which point you finished your project. It is very often, that you finish before you implemented the last planned ring of the onion. That means your profit increases massively!

On the other side you make sure, that every ring is fully working. With that you reduce the risk of bugs extremely, as you need to stay in simple behavior with this concept.

Leave a Reply