The 42 Principles · Principle VIII
Practical Beats Clever
Clarity, maintainability, service, and choosing solutions people can understand and sustain.
Foundational Truth
There is usually more than one way to accomplish something.
The most sophisticated solution is not automatically the best one.
The most fashionable design is not automatically the most appropriate one.
The cleverest answer may impress the person who created it while burdening everyone who must operate, support, repair, or replace it.
Choose the solution that works clearly, reliably, and sustainably within the reality you actually have.
A solution should be judged by what it accomplishes, not by how impressive it appears.
There Is More Than One Way to Win
Success does not always arrive in the form we expect.
Some people succeed through speed.
Others through patience.
Some through creativity.
Others through consistency.
Some dominate visibly.
Others quietly create the conditions that make everyone around them better.
Michael Jordan is remembered as one of basketball's most extraordinary individual scorers and shot creators.
Bill Russell represented a different path to winning.
Russell did not need to produce the same kind of offensive spectacle.
His influence came through defense, rebounding, positioning, anticipation, transition, leadership, and the ability to shape the game around him.
The comparison should not be used to declare one style universally superior to the other.
That would miss the lesson.
The lesson is that there is more than one way to create the desired outcome.
One method may be more exciting.
Another may fit the team, circumstances, and objective better.
The scoreboard does not award additional points for complexity.
The goal is not to look like the person solving the problem. The goal is to solve it.
Use the Right Vehicle for the Job
Years ago, a customer was struggling to understand the difference between IOPS and throughput.
I explained it using two vehicles.
Imagine that you need to deliver a package and can choose between a Porsche and a pickup truck.
If you need to deliver one small package as quickly as possible, the Porsche is the obvious choice.
It accelerates faster.
It travels faster.
For that particular job, speed matters most.
But suppose you need to deliver 300 packages.
The Porsche is still the faster vehicle.
That fact has not changed.
But it cannot carry the entire load.
It must make repeated trips while the pickup carries far more packages at once.
Even though the pickup moves more slowly, it may deliver the complete load sooner.
The fastest vehicle is not always the fastest way to finish the work.
Performance depends on what must move, how much must move, and what outcome actually matters.
The same distinction appears throughout technology.
Some workloads depend on how quickly individual operations can be completed.
Others depend on how much total work can pass through the system over time.
A storage system may handle many small requests very quickly but struggle with large volumes of data.
Another may complete fewer individual operations while moving far more data during the same period.
Neither is universally faster.
Each is suited to a different kind of work.
The mistake is measuring one quality and treating it as the entire definition of performance.
Speed matters.
Capacity matters.
Latency matters.
Throughput matters.
Reliability matters.
The correct priority depends on the job.
Do not choose the fastest tool. Choose the tool that completes the whole task most effectively.
Cleverness Has a Cost
Clever solutions are attractive.
They demonstrate skill.
They compress many actions into a small amount of code.
They use advanced patterns.
They solve several theoretical problems at once.
They may even be genuinely elegant.
But cleverness often carries hidden costs.
A clever solution may be:
- Harder to explain.
- Harder to test.
- Harder to observe.
- Harder to support.
- Harder to modify safely.
- More dependent on its original creator.
- More fragile when circumstances change.
- More expensive than the problem justifies.
The person who designed it may understand every choice.
The person awakened at 2:00 in the morning may not.
A design is not complete when its creator can operate it.
It is complete when the people responsible for its future can understand and support it.
Elegance that cannot survive a handoff is often disguised fragility.
Design for the Whole Life of the Solution
Development is only one stage of a system's life.
A solution must also be:
- Deployed.
- Configured.
- Secured.
- Observed.
- Maintained.
- Troubleshot.
- Upgraded.
- Documented.
- Transferred.
- Eventually replaced.
A design that is convenient to build but painful to operate has moved complexity rather than removed it.
A single application stack may allow a development team to move quickly.
That may be the practical design.
But as the system grows, one large code path may become difficult to test, isolate, deploy, and support.
At that point, separating well-defined capabilities may allow teams to:
- Isolate faults.
- Deploy changes independently.
- Scale specific components.
- Establish clearer interfaces.
- Assign responsibility more effectively.
- Replace one capability without rebuilding everything.
Yet distribution also creates new burdens:
- Network failure.
- Authentication between services.
- API compatibility.
- Distributed logging.
- Dependency management.
- Deployment coordination.
- More infrastructure to operate.
The practical answer is therefore not:
"Distributed systems are better."
Nor is it:
"Monoliths are simpler."
The practical answer is:
"Choose the amount of separation that reduces the total burden of the system."
Sometimes that is one application.
Sometimes it is several services.
Sometimes it is a modular monolith with clear internal boundaries.
Architecture should serve the work.
The work should not be forced to serve the architecture.
Simplicity Is Not the Same as Fewer Pieces
A system with one visible component may appear simpler than a system with ten.
But visible size is not the same as operational simplicity.
One enormous application may contain:
- Hidden dependencies.
- Shared state.
- Intertwined business rules.
- Unclear ownership.
- Unpredictable side effects.
- A release process in which every change risks everything.
Ten well-defined components may be easier to understand because each has a clear purpose and boundary.
The reverse can also be true.
Ten services may each require:
- Separate deployment.
- Separate monitoring.
- Separate credentials.
- Separate versioning.
- Separate failure handling.
What looks clean on an architecture diagram may become exhausting in production.
Do not count components and call the smaller number simple.
Measure the effort required to understand, change, operate, and recover the whole system.
Simplicity is not the absence of parts. It is the absence of unnecessary difficulty.
Practical Data Design
Database design reveals the same tension.
A single wide table may appear convenient.
Frequently used values are available without several joins.
Queries may initially seem easier to write.
But convenience at the point of reading can create costs elsewhere:
- Repeated data.
- Inconsistent updates.
- Larger indexes.
- More expensive writes.
- Greater storage use.
- Ambiguous ownership of values.
- Increased risk that two records disagree about the same fact.
Normalization separates distinct concepts.
Customers belong in a customer structure.
Orders belong in an order structure.
Products belong in a product structure.
Relationships are represented deliberately rather than repeated everywhere.
Foreign keys help preserve those relationships.
Joins rebuild the view needed by the application.
This often improves integrity, maintainability, and clarity.
But even here, the practical answer is not always maximum normalization.
Some workloads benefit from:
- Summary tables.
- Materialized views.
- Cached results.
- Reporting structures.
- Purposeful duplication.
- Denormalized analytical models.
The practical question is not:
"Which design is academically pure?"
It is:
"Which design preserves the required integrity while meeting the real workload?"
A clever schema demonstrates knowledge of database theory.
A practical schema applies that knowledge to the system that must actually run.
Solve the Problem You Have
Cleverness often begins solving problems that do not yet exist.
A small internal application is designed for millions of users.
A simple workflow receives an elaborate orchestration platform.
A report needed once per week becomes a real-time streaming architecture.
A modest database receives a globally distributed design.
A short script becomes a framework.
These designs may be technically impressive.
They may also consume more time, money, attention, and support effort than the original problem deserved.
Future growth should be considered.
It should not be imagined without limits.
Design for reasonable change.
Preserve paths for expansion.
Avoid decisions that make growth impossible.
But do not burden today with every possible version of tomorrow.
Do not build a cathedral when the need is shelter.
Practicality Includes People
A technically superior solution can fail when it ignores the people expected to use it.
A process may be mathematically optimal but too complicated to follow consistently.
An interface may offer complete control but overwhelm the person performing an ordinary task.
An automation may save several minutes while making failures almost impossible to diagnose.
A security control may be theoretically perfect but encourage users to create unsafe workarounds.
Practical design considers:
- Available skills.
- Staffing.
- Budget.
- Time.
- Existing tools.
- Support coverage.
- Regulatory requirements.
- Failure tolerance.
- Human behavior.
The real environment is not an inconvenience to design around.
It is part of the design.
A solution that ignores the people operating it does not understand the problem it claims to solve.
Make the Obvious Choice Easy to Understand
Practical solutions often look unsurprising after they are finished.
The workflow is clear.
The components have understandable purposes.
The failure modes are visible.
The documentation matches the implementation.
A new person can follow the reasoning.
That lack of mystery is a strength.
The goal is not to create something no one else could have imagined.
The goal is to create something others can understand, trust, and continue.
The best design may not produce admiration.
It may produce something more valuable:
Confidence.
People know what it does.
They know why it exists.
They know where to look when it fails.
They know how to change it without guessing.
The highest form of cleverness may be creating something that no longer looks clever.
In Practice
Before choosing a solution, ask:
- What outcome are we actually trying to produce?
- Who must operate this after it is built?
- What does failure look like?
- How easily can the failure be isolated?
- Can another person understand the design?
- Are we removing complexity or relocating it?
- Does the solution fit our current scale?
- What future change is reasonably likely?
- Which parts truly require sophistication?
- Are we using this pattern because it fits, or because it is fashionable?
- Would a simpler approach meet the same need?
- What is the total cost across development, operation, support, and replacement?
- Are we optimizing one measurement while making the complete task slower?
- Which option completes the whole job most effectively?
Prefer the simplest solution that satisfies the real requirements.
Not the fewest lines of code.
Not the fewest components.
Not the least advanced technology.
The least unnecessary difficulty.
Failure Modes
"Practical beats clever" does not mean innovation is bad.
It does not mean choosing the oldest technology.
It does not mean avoiding advanced designs.
It does not mean accepting poor quality because improvement requires effort.
Some problems are genuinely complex.
Their solutions may require sophisticated algorithms, distributed components, specialized tools, or unconventional thinking.
Oversimplifying a complex problem is not practical.
It merely hides complexity until the system fails.
There is also danger in using practicality as an excuse for short-term thinking.
A quick workaround may feel practical today while creating years of maintenance debt.
The easiest immediate action is not always the most practical total solution.
Practicality considers the complete lifespan and the full group of people affected.
Simple is not careless. Practical is not temporary.
Questions to Ask Yourself
- Am I solving the problem or demonstrating my skill?
- Is this complexity required?
- Who will inherit this decision?
- What burden does this design place on support?
- Does this solution fit the environment we actually have?
- What becomes easier?
- What becomes harder?
- Have I measured the entire system or only the part I am building?
- Is this approach resilient enough to justify its complexity?
- Could I explain this design without relying on jargon?
- Will the next person understand why we chose it?
- Is there a less impressive solution that would work better?
- Am I choosing the fastest component or the fastest complete outcome?
- What is the actual load this solution must carry?
Closing Thought
There are many ways to produce an outcome.
Some are beautiful.
Some are sophisticated.
Some are exciting.
The best one is the approach that meets the need, survives reality, and remains understandable to the people responsible for what comes next.
The fastest component does not always create the fastest system.
Do not choose the solution that makes you look clever. Choose the one that keeps working.
Related Principles
Continue the idea.
These Principles share themes with Principle VIII.
Principle X
Readability Is Reliability
Clear communication, understandable systems, maintainable work, and respect for the person who comes next.
Read Principle X →Principle XVI
Documentation Is a Feature
Documentation as institutional memory, teaching, repeatability, recovery, and reduced dependence on individuals.
Read Principle XVI →Principle XXIV
Automate to Remove Toil
Using automation to eliminate repetition while preserving judgment, responsibility, and understandable systems.
Read Principle XXIV →Principle II
Ask One More Question
The courage to ask simple questions, challenge assumptions, resist groupthink, and admit what is still unknown.
Read Principle II →