Musashi vs Kojiro: What Software Architecture Can Learn from Fundamentals
Source: Dev.to
In Japanese history, one duel is remembered not for spectacle — but for restraint.
Sasaki Kojiro arrived dressed for honor: a long blade, a perfect stance, ceremony, reputation, form.
Miyamoto Musashi arrived late, with no armor, no flourish, wielding a wooden sword carved from an oar.
The duel ended quickly—not because Kojiro was weak, but because Musashi understood something deeper: fundamentals beat flash when conditions are uncertain.
Modern software architecture repeats this duel every day.
The Modern Kojiro: “We’ll Need Microservices to Scale”
Every startup eventually hears this sentence:
“We’ll need microservices to scale.”
Sometimes it’s true, but most of the time it’s said far too early—before scale, before product‑market fit, before teams even know what they’re scaling.
Typical early‑stage startup profile
- 1–3 engineers
- Unstable requirements
- No real traffic pressure
- Limited budget
- Rapid iteration cycles
Yet they reach for:
- Kubernetes
- Service meshes
- Distributed deployments
- Multi‑database strategies
- Cloud abstractions layered on abstractions
This is Kojiro arriving in ceremonial armor to a fight that doesn’t require it. Microservices solve organizational scale, not early‑stage chaos.
At this stage you trade one hard problem (code structure) for five harder ones:
- Network boundaries
- Deployment complexity
- Observability overhead
- Security surfaces
- Distributed failure modes
The blade is impressive. The battlefield is wrong.
Musashi’s Choice: The Modular Monolith
Musashi didn’t reject swords; he rejected unnecessary ceremony. The architectural equivalent is a modular monolith.
A modular monolith is:
- One deployable application
- With strong internal boundaries and discipline
Key properties
- Single codebase
- Single deployment
- Clear module ownership
- No cross‑module leakage
- Explicit contracts between domains
Example structure
/users
/domain
/service
/controller
/billing
/domain
/service
/controller
/analytics
/domain
/service
/controller
Each module:
- Owns its data
- Exposes interfaces
- Hides implementation details
This is not “just folders”; it’s intentional separation—Musashi’s wooden sword: simple, focused, deadly.
Why This Wins Early Duels
Cheap to Run
- Deploy once, monitor once, debug once.
- Infrastructure bill stays boring—a feature.
- No clusters to babysit, no service mesh to understand before shipping.
Fast to Adapt
- Early‑stage requirements change daily.
- A modular monolith lets you refactor confidently, change internals without ripple effects, and move fast without fear.
Security Is Easier
- One application means fewer exposed surfaces, simpler auth flows, and clearer data boundaries.
- Distributed security is harder.
Team Clarity
- Even with two developers: one owns auth, one owns analytics.
- Responsibilities are obvious; ownership is visible; no “who broke prod?” mysteries.
The Discipline That Makes or Breaks It
Musashi still trained relentlessly. A modular monolith fails without discipline.
Rules that matter
- No direct DB access across modules.
- No importing internal services from other modules.
- Communication only through defined interfaces.
- Shared code lives in explicit shared layers.
Breaking these rules yields a tangled monolith, not a modular one—that’s cosplay, not Musashi.
The Scaling Moment (Where Kojiro Loses)
When scale actually arrives:
- Traffic increases.
- Specific domains get hot.
- Team size grows.
At that point:
- Each module already behaves like a service.
- Boundaries are already enforced.
- Extraction becomes mechanical, not emotional.
You can:
- Containerize a single module.
- Deploy it independently.
- Move it to Cloud Run, ECS, Railway, etc., while leaving the rest untouched.
No rewrite, no panic, no “three months to re‑architect.” The system evolves; it doesn’t reset. This is Musashi adapting mid‑fight—not Kojiro trapped by form.
Why I Recommend This to Early Founders
It optimizes for:
- Learning
- Cost
- Speed
- Clarity
- Future optionality
You’re not rejecting microservices; you’re earning them. Microservices are a tool—like Kojiro’s sword—not a badge of seriousness.
The most expensive architecture is the one you build before you understand the problem.