Convention Over Configuration: The Secret to Saner, Faster Development

Convention Over Configuration: The Secret to Saner, Faster Development
Photos generated using Le Chat, combined using Photopea

You’re lying to yourself.

Every new project starts the same way: You copy-paste a graveyard of config files - webpack.config.js, .eslintrc.json, tsconfig.json, you name it, like they’re sacred texts. You tweak them for hours. You argue about them in PRs. Not only that, but you document them, maybe. And for what?

Half of these files don’t matter.

The folder structure already tells your tools where to look. The framework already knows how to bundle, lint, and test. You’re writing YAML for things the computer could infer. Meanwhile, your competitors, using Next.js, Rails, or Spring Boot, are shipping features while you’re still debating whether apiVersion: v1.3.7-beta was really necessary.

Here’s the truth: Most config is cargo culting. A fear of magic. A "what if we need this later?" tax. And it’s costing you time, sanity, and velocity.

The Illusion of Control (And the Organic Reality)

Configuration isn’t bad, it’s just overused. Plenty of things are already organically configured by structure and convention. The folder’s there. The defaults are there. So why are you still writing YAML for things the framework could infer?

The Human Problem: Why Teams Drown in Config

  • The "Not Invented Here" Syndrome: Devs love tweaking things to feel ownership.
    Make conventions feel like their invention. Run a workshop to define team-wide standards.
  • Fear of Lock-in: "What if we need to switch frameworks?" Newsflash: If your config is so custom that switching is hard, you’re already locked in.
    Bet on conventions that are framework-agnostic (e.g., src/ for source code, tests/ for tests).
  • Lack of Trust: If your team doesn’t trust the defaults, they’ll override everything.
    Prove it works. Run a pilot project with zero config. Show them the speed.
  • The "Senior Dev" Trap: The person who’s been there longest insists on their 2012 config.
    Make them own the maintenance. Watch how fast they change their tune.

Culture eats config for breakfast. If your team rewards cleverness over simplicity, you’ll always have too much config.

Why We Cling to Config (And Why We’re Wrong)

  1. Fear of the Unknown "But how does it know?" The same way your IDE finds node_modules. It’s not magic, it’s design. You don’t ask how your car’s engine works every time you drive. Stop demanding your tools explain themselves.
  2. Cargo Cult Development We copy-paste config like it’s a spell to ward off bugs. "It worked last time!" (Spoiler: It didn’t. You just forgot the bugs.) If you can’t explain why a config exists, it shouldn’t.
  3. The "What If" Tax "What if we need to customize this later?" You won’t. And if you do, you can override the defaults then. Until then, you’re paying interest on hypothetical debt.

The Result

  • You spend hours setting up what could’ve been automatic.
  • You introduce bugs in config files that didn’t exist in the defaults.
  • Half the time, you forget to add the config anyway. The other half, you’re just duplicating what the convention already handles.
  • Future You hates Past You for not documenting why apiVersion: v1.3.7-beta was "critical."

Most of your config is just noise. The framework already knows (or should know) what you want. Let it make this their job not yours.

Why Convention Over Configuration Is Superior

There are plenty of reasons why conventions are superior.

Better DX

No setup paralysis. No second-guessing if you ticked all the config boxes. Just clone, code, and run. The tooling handles the rest, like a good barista who already knows your order.

Easier Long-Term

Less explicit config = less to maintain. Less to maintain = fewer fires. Fewer fires = more time for actual features (or caffeine). Config files are like garden gnomes: They seem cute until you realize they’re just cluttering up your yard.

Consistency

Every project follows the same rules. No more "Where’s the damn database config this time?" or "Why is this project’s folder structure a Rube Goldberg machine?" Conventions are the guardrails that keep your team from driving into a ditch.

The Joy of Discovery (Instead of Mandatory Config)

Most locations and features should just work by default. Config is for the exceptions, not the rule. It’s like a good GPS: It gets you there without asking for your life story first.

There are already plenty of frameworks out there that are popular and utilize this approach.

Next.js

Routes? Just drop a file in /pages or /app. API endpoints? No routes.config.js. No "Did I forget to register this?" panic. The folder is the config. It’s like Lego: You snap the pieces together, and it works. No instruction manual required.

Spring Boot

Autoconfiguration for databases, security, and MVC? Just add a dependency and go. Need a REST endpoint? Annotate a method. Require a database? Toss in spring-boot-starter-data-jpa. No XML. No 500-line application.properties. Just code that does the thing.

Apply This to Your Tools (Yes, Even Internal Ones)

Enterprise or homegrown, if you’re building tools, bake in conventions. Your future self (and your team) will thank you.

Make your apps feel like a well-designed API, intuitive, predictable, and boring in the best way. Customization should be opt-in, not mandatory.

For Internal (Developer) Tools

Default file locations, sensible naming, and "it just works" setups save hours of onboarding and debugging. Example: A script that assumes /data/input and /data/output unless told otherwise. No one wants to explain "where the files go" every time a new hire joins. Documentation is for edge cases, not basic usage.

For Enterprise applications & services

If your application requires a 10-page manual just to start, you’ve failed. Conventions reduce training time and "How do I…?" Slack messages. Aim for "obvious," not "obtuse."

Changing minds is harder than changing code.

If you want people to “just use the defaults,” you need three things:

  • Evidence: Show the defaults work (benchmarks, fewer PR comments, faster setup).
  • Visibility: Show how much crap disappears when you follow the conventions.
  • Low friction: Make the default path the easiest path. People don’t resist simplicity; they resist losing control.

And yes, sometimes you need to say: If your use case is the one true special snowflake, fine, override. But prove it.

The Trade-offs (Yes, They Exist)

If your use case is truly unique, you’ll need to tweak. (But let’s be honest, most aren’t.) Flexibility is still there, it’s just not the default. And that’s the point.

The only people who "need" endless config are the ones who enjoy reinventing wheels, or writing YAML at 2 AM. For everyone else, conventions are a feature, not a limitation.

Customize when you must. Document why. Then ask: "Was this really worth it?" (Spoiler: It usually isn’t.)

Clear Edge Cases Where Convention Over Configuration Doesn’t Work (And Why)

Conventions are great, until they’re not. Here’s where they fail:

  • Legacy Systems: If you’re bolting a modern framework onto a 15-year-old monolith, conventions will buckle. The system’s tech debt is already a config file written in blood and regret.
    Isolate the modern code. Use adapters to translate between the old world (config hell) and the new (convention heaven).
  • Regulatory Nightmares: Finance, healthcare, or government work often requires explicit, auditable config for compliance. Conventions can’t sign off on an audit.
    Use conventions for 90% of the app, but carve out a “compliance zone” where config is king (and documented like a legal contract).
  • Truly Unique Workflows: If your use case is "We need to process data in a way no one else does", conventions won’t cut it.
    Build a thin abstraction layer. Let the framework handle the boring stuff, but expose hooks for your snowflake logic.
  • Polyglot Persistence: Using three databases, two message brokers, and a partridge in a pear tree? Conventions assume homogeneity.
    Define your own internal conventions. Document them like they’re the Ten Commandments.

If you’re spending more time fighting the framework than using it, you’ve hit an edge case. Customize, but document the hell out of it.

Conventions aren’t sacred.

They’re defaults, not commandments. Good teams revisit them regularly, to see if they still hold up. If a convention slows people down, it gets replaced. If it works 95% of the time, it stays.
The trick is simple: treat conventions like product features. Version them, document changes, and give teams a smooth migration path instead of dumping breaking changes on Friday afternoons.

Real-World Proof

As mentioned earlier, this concept is already adopted by quite some frameworks and tools.

Let’s be real: the strongest evidence I’ve seen comes from actual teams I’ve worked with. Every time we reduced config sprawl and moved toward solid conventions, onboarding speed went up, PR churn went down, and the team shipped more consistently.
No glossy research paper, just repeated real-world results.

And yes, the DORA/Accelerate findings back the same trend: teams with standardized workflows (their words) are the teams that ship faster and break less.

I can't claim numbers, but I am connecting my lived results with widely accepted studies.

The Frameworks That Scale: Next.js, Spring Boot, Rails, Django, they don’t dominate accidentally. They bet on conventions, not config marathons.

The Teams That Ship: Fast teams aren’t stuck debating config files. They’re solving real problems while everyone else is still tuning their webpack plugins.

How to Adopt It (Without Regret)

  1. Pick a convention-first framework. Trust its defaults, like their gravity.
  2. For your tools, design for the 80% use case. Make the other 20% opt-in.
  3. Customize only when you definitely have to. Document why. Then ask: "Is this worth the maintenance tax?" (Spoiler: It’s usually not.)

Who actually defines the conventions?

Ideally, a small group of experienced engineers (your Platform, DevEx, or Architecture folks) who see patterns across teams. They design the defaults, collect feedback, and keep everything consistent.

Maintenance is straightforward:

  • Propose changes via lightweight RFCs or informal communication
  • Test them with one or two teams
  • Roll them out with clear docs and migration notes
  • Version conventions just like software

This keeps things sane and avoids “tribal knowledge hell.”

Your Action Plan (Do This Now)

  1. Audit your config. Run git grep "config" or find . -name "*.yml". Delete anything older than your last refactor.
  2. Pick one tool. Nuke its config for a sprint. If no one notices, keep it gone.
  3. Document the exceptions. Every override needs a WHY.md or it’s tech debt.

Convention over configuration isn’t a principle, it’s a deletion strategy. Start with one file. Today.

TL;DR: Defaults > Decisions

Convention over Configuration isn’t about avoiding config, it’s about avoiding the config you don’t need. Your code, your tools, and your sanity will thank you.
It isn’t laziness, it’s leveraging decades of collective wisdom so you can focus on what matters. The rest is just cargo culting with extra steps.