Categories
T-SQL Tuesday

T-SQL Tuesday #180: Good Enough is Perfect

This month, Josephine has asked how we achieve good enough without burning out in the pursuit of perfect.

When designing data solutions, aiming for perfection can lead to endless iterations, moving targets, delays, and – as Josephine points out – burnout.

A quote which encapsulates the essence of this for me:

Perfection is the enemy of progress

Winston Churchill

If we design and building solutions which are lead by our own key principles, then we can feel confident that ‘good enough’ is moving us in the right direction.


First, a focus on scalability and flexibility helps establish a resilient foundation. A ‘good enough’ design would anticipate change and allow for adjustments without requiring a complete overhaul. For example, building a schema with a consistent approach to normalisation and indexing.

Secondly, adopting a modular approach to code so that distinct functions can be encapsulated and reused. A ‘good enough’ design would reuse established features such as meta-data driven operations, or a common logging framework – and only build new where needed. Separation of these functional modules allows them to be iterated or swapped out entirely without rework to the wider solution.

Finally, having effective collaboration loops can help refine designs, adopting feedback early on to avoid rework in the future. Insights from developers and end-users with different experiences and perspectives can make the design process more efficient and keeps the focus on outcomes.


Most of the time, we can recognise that no design will anticipate every possible future scenario, but we can prioritize based on current needs whilst adhering to our personal principles to progress in the right direction.

We’ll head towards perfection, even if we don’t quite reach the destination.

Leave a comment