Any run-of-the-mill engineer can design something which is elegant. A good engineer designs systems to be efficient. A great engineer designs them to be effective.

(McBryan’s Law) You can’t make it better until you make it work.

One of the most important aspects of design is simply to defer decisions as long as possible (see Clean Architecture). This avoids issues such as lock-in and perhaps to some extent bike shedding.

One of the key drivers when dealing with McBryan’s Law is the important of management to focus on the end to end deployable solution first rather than getting it right the first place.

What is interesting about these two rules in particular, is the reality that many people will be able to build something that works and have opinions, but until we can get an end to end solution, we won’t have sufficient information to know if it is correct or know how to proceed.

The other challenge is that changes in team makeup, direction and perhaps underlying architecture influence direction of software development, we often have to be wary of deciding that we have the “best” design.