Prologue

I design
systems that
outlive their
vendors_

Software architect based in Istanbul.
A decade of shipping systems that had to outlast the hype around them.

$ whoami
cihan taylan · software architect · istanbul

$ focus
i design systems_
↓ SCROLL
// THE SHAPE, NOT THE BRANDSLIVE_SYSTEM.run()ClientrequestAPI Gatewayauth · rate · validate⚡ liveServicebusiness logicorchestrationDatabasestate of the worldQueuejobs · events · retries

I build the boring parts right, so the interesting parts can happen.

My stack is whatever the problem demands — open-source when possible, managed services when honest.

Architecture is a bet on the future. I try to make the kind that ages well.

I'm not here to sell hours. I'm here to place opinions.

MULTI-TENANT SaaS

Architecture

Row-level, schema-level, hybrid — shipped all three. Each has a scar to show for it.

Done it enough times to have opinions.

MONOLITH → MICRO

Surgery

Not a fan of the cult. But I know when it's time — and when the monolith is still the right answer.

Cut when you see the seams, not when the blog post tells you to.

ASYNC & REAL-TIME

BullMQ · gRPC · Kafka

Background jobs that actually finish. Bidirectional streams. Event pipelines. The right tool for the right latency — not the trendy one.

BullMQ for work. Kafka for events. Pick the wrong one and you'll pay for years.

LEGACY

Modernization

10-year-old PHP still making money? Respect. Let's give it another 10 years without a rewrite.

The best legacy is the code that still runs.

DEV ENVIRONMENTS

End-to-end engineering setup

Everything a productive team needs — CI/CD, Docker orchestration, deploy automation, observability, monorepo ergonomics. All open-source. Your environment, your rules.

A team's velocity is set by the day they onboard.

TECHNICAL DUE DILIGENCE

Audits

Pre-acquisition, pre-funding, or just pre-regret. I tell you what the codebase won't.

Every codebase tells the truth if you know how to read it.

A vector map of what's in my head.

Every tool I reach for, watch from a distance, or have buried. Four categories, five concentric zones of intimacy — the closer to the center, the more it's in my daily hands.

CORESHIPPROBEWATCHBURIEDCLOUD + PLATFORMAI + INTELLIGENCEBACKEND + DATAFRONTEND
CORE · default SHIP · proven PROBE · exploring WATCH · distant BURIED · past life

// hover any dot · filter by ring · 85 technologies on the map

The same problems, different logos.

Job titles change. Stacks change. But the problems tend to rhyme. Here's what I've shipped — repeatedly — across a decade of teams.

Monolith becoming unmaintainable, team shipping slower every quarter.
4×SHIPPED
Zero observability. Every bug a mystery. Every incident a 3am guessing game.
6×SHIPPED
Cloud bill doubled in a year and no one knows why.
3×SHIPPED
New team, no shared dev environment. Onboarding takes two weeks.
5×SHIPPED
Legacy PHP that still makes money. Nobody wants to touch it.
2×SHIPPED
Multi-tenant SaaS, wrong isolation model picked three years ago.
3×SHIPPED
Real-time system stuck on polling, product complaining about lag.
2×SHIPPED
CI/CD that everyone fears. Deploy Fridays forbidden by folklore.
4×SHIPPED

// a decade of work · numbers rounded · stories withheld

The shape of a healthy engineering team.

What changes when I'm there. Left column is what I often walk into. Right column is where we end up.

// BEFORE
xOnboarding takes two weeks
xDeploys are rituals. Fridays forbidden.
xNo observability. Every bug a séance.
xCloud bill grows, nobody knows why.
xLocal dev broken on half the team.
x"Works on my machine" still a joke.
// AFTER
Clone, one command, work. Two hours.
Git push → production in minutes.
Dashboards before bugs. Traces for everything.
Every dollar accounted for. Bill predictable.
Local env mirrors production.
"Works everywhere" is the only option.

Opinions I'll defend at 2am.

Hard-won takes from a decade of placing architecture bets. Some controversial. All real. Click any to read the defense.

#01 · MICROSERVICES+
Microservices are a tax, not a feature.
#02 · VENDOR LOCK-IN+
Managed services are a great product. Your dependency on them isn't.
#03 · DEVELOPER EXPERIENCE+
If your new hire can't docker compose up, you failed.
#04 · DOCUMENTATION+
Documentation is a love letter to your future self.
#05 · KAFKA+
Kafka is not a database. Stop treating it like one.
#06 · BEST ARCHITECTURE+
The best architecture is the one your team can delete.
#07 · OPEN SOURCE+
Open-source isn't free. It's still usually cheaper.
#08 · MULTI-TENANCY+
Multi-tenancy is a business decision, not a technical one.
#09 · OBSERVABILITY+
Observability before scale. Not after.

// nine opinions, each earned the hard way

Not just the happy path.

Every system has four lives: it succeeds, it refuses, it throttles, it degrades. Pick a scenario. Watch where the time goes — and where the decisions hide.

Nginx
2ms
Rate Limit
1ms
Auth Guard
3ms
Validator
2ms
Service
8ms
DB
14ms
scenario: Success · happy path · 30ms total
// WHY THIS STAGE
Nginx

Edge termination, TLS, connection pooling. First line of defense against flood traffic.

// CODE AT THIS STAGE
# nginx.conf
location /api {
  limit_req zone=api burst=20;
  proxy_pass http://backend;
  proxy_set_header X-Real-IP $remote_addr;
  proxy_set_header X-Request-ID $request_id;
}
// WHAT IT EMITS
observability
access.log
upstream.ms
status_code metric

I don't read books. I break things.

Most architects will show you their bookshelf. I'll show you my scars. Five ways I actually get better — none of them involve a chapter summary.

METHOD

I build boilerplates to learn stacks.

Every time I want to learn a technology deeply, I build a production-ready starter. Auth, queues, CI/CD, Docker, tests — the works. If it survives three real projects, I know it.

39 repos on github · 6 production-grade boilerplates
METHOD

I break things on purpose.

The fastest way to learn a system is to break it at 2am in staging. Production teaches you what tutorials can't — the five assumptions nobody wrote down.

// every outage becomes an ADR
METHOD

I rebuild what I can't buy.

If a tool costs $500/month, I want to know why. Usually I can build 80% of it in a weekend. The remaining 20% teaches me whether to buy or keep building.

// self-hosted PaaS replacing $6k/mo SaaS
METHOD

I pair with AI when I'm stuck.

Not to write the code for me — to argue with me. The best use of a model is as a rubber duck that talks back. Wrong answers clarify my thinking faster than right ones.

// Claude & Codex in the daily rotation
METHOD

I teach what I just learned.

Nothing forces understanding like explaining it to someone who doesn't yet. I don't run courses — I run whiteboards. Team pairing, open questions, showing the scars.

// mentoring inside teams, not on stages
// A DECADE IN NUMBERS
6
boilerplates built
12+
production systems broken
4
tools rebuilt from scratch
8
engineers mentored
0
blog posts written
› yes, zero blog posts. that's the point.
I'm suspicious of engineers who only read about the work.
I'm even more suspicious of engineers who only do the work.
The best ones read their own scars.

The engineer is not the whole person.

What I do when I'm not thinking about systems. Or, honestly, still thinking about systems — just different ones.

Music

Guitar. Riffs, rhythm, the patience to practice a phrase until it's clean. Same muscles as clean code.

Two wheels

Motorcycles taught me risk management before any incident postmortem did. Speed only matters when you trust the brakes.

The lens

A photographer's eye is a product manager's eye: framing, hierarchy, what you leave out of the frame.

Always looking to think.

Found something broken? A decision that puzzles you? A system you can't untangle? A contrarian take to argue with me about?

cihantaylan@cihantaylan.com

Replies come when they come. I read everything.

GitHubLinkedInInstagram