“Sufficiency, completeness, and primitiveness – Achieving sufficiency and completeness means ensuring that a software component captures all the important characteristics of an abstraction and nothing more. Primitive- ness means the design should be based on patterns that are easy to implement.” – SWEBOK V3.0, Guide to the Software Engineering Body of Knowledge
Primitiveness is a concept not mentioned often in software but probably should be. We almost always should focus on software concepts that are easy to implement.
“Easy to implement” is a good standard for most business software. While writing business software, we often push ourselves to create more plumbing but not actual business software. We spend our time coming up with very clever schemes.
We are often proud of our creations, almost like they are our children. Clever software tricks are used to maximize our love for our creations. But is that good? Is it good we bake in unnecessary complexity? The obvious answer is “no”.
We want solutions that are easy to implement. That allows for a few things we want in our software. If they are easy to implement, more people can implement them. It doesn’t take a genius to write the software. Another big advantage of being easy to implement is that it’s probably easier to understand. Understanding our software is even more important than being easy to implement.
A clever person would point out that not all software can be made easy to implement. Sometimes algorithms are often hard, but we can get away with keeping things simple most of the time.
Instead of SOLID, or even CUPID, maybe we need PIPE: Primitives, Idiomatic, Predictable, Easy to Understand. I don’t expect PIPE to catch on, but I thought it would be fun to create an acronym.