How to achieve simplicity in software engineering?
Focus only on “not being complex” does not address the issues created in requirements, design and development. To achieve simplicity in software engineering, we need to answer questions in three areas:
- How can we simplify the scope?
- How can we simplify the design?
- How can we simplify the implementation?
How can we simplify the scope?
We can do that by applying the 80–20 principle. Product Owners and the development team should ask the question, how can I achieve 80% of business effect with 20% of efforts? Review that priority every sprint.
How can we simplify the design?
We can simplify design with complexity elimination and design simplification.
- complexity elimination: cutting unnecessary trips in a job
- design simplification: finding a shorter path
Complexity elimination is about doing less work; while design simplification is about doing work faster and smarter.
How can we simplify the implementation?
We can simplify implementation by not reinventing the wheels. How can we leverage the experiences of others and existing solutions to a well known problem? Is there already a widely adopted, open sourced and scalable solution? Is there already a company internal solution (Google is very good at this by making most of its source codes searchable)? Is there a library or design pattern for this?
The simplest solution is always the one that has already been implemented and used else where.