Software should follow the KISS principle, keep it simple Sherwood. Yes I know this is old news, but it is so important it needs repeating. This applies to all aspects of the software development process. The functional design should aim for addressing the most pressing user needs. The user interface should be clean and consistent in its layout and operation. Last, and certainly not least, the underlying code should not try to do more than the functionality and UI require.

One thing that I have seen repeatedly is designers trying to solve non-existent problems. There is pressure from marketing for feature bullet points. They also want to entice people to upgrade, so yet more pressure to add features. API designers and coders try to future-proof by adding the capability to handle anticipated needs. This is often called “extensibility points.” The problem is that almost all such efforts miss the mark because technology changes so quickly and in often unpredictable ways.

Complexity in code invites bugs and security issues. The easiest way to minimize these issues is to write absolutely no more code than necessary. This also helps to keep projects on track. Engineers and technologists by their nature want to invent stuff, so the tendency to do more than necessary is understandable. Resist the urge and take pride in elegantly delivering what is needed and no more.