Building Engineering Organizations from Zero
I joined a startup as engineer #3. When I left three years later, we were at fifty. I wasn’t the CTO—I was an engineer who cared about how teams work, which meant I watched every organizational experiment closely: what accelerated us, what slowed us down, and what sounded great in all-hands but changed nothing.
Building an engineering org from zero isn’t about copying Spotify’s squad model or Google’s OKRs. It’s about sequential problems: first you need people who can ship, then you need people who can ship without breaking things, then you need people who can help others ship.
Each phase needs different hiring, different process, different tooling. What works at five engineers actively hurts at thirty. Here’s the playbook I wish we’d had—honest about what worked and what we’d skip next time.
Phase 1: Foundation (0-5 Engineers)
You’re proving the product can exist. Process is minimal. Everyone touches everything.
Hiring: Generalists Who Own
At 3 engineers, you don’t need a Kubernetes expert. You need someone who can build the feature, fix the bug, deploy on Friday, and answer customer support on Monday.
What we optimized for:
- Ownership — do they take problems to completion without hand-holding?
- Learning speed — can they become productive in a new stack in weeks?
- Communication — can they explain trade-offs to non-engineers?
- Culture contribution — would you want them on-call at 2 AM?
What we deprioritized:
- Deep specialization (no “frontend only” hires)
- Pedigree (great engineers come from everywhere)
- Years of experience (judgment matters more than tenure)
Interview process (kept simple):
- Technical screen — real problem, not leetcode (1 hour)
- System design or architecture discussion (1 hour)
- Culture/values conversation (30 min)
- Team lunch or informal chat (30 min)
Decision within 48 hours. Slow hiring loses candidates to companies that move fast.
Culture: Defaults That Stick
Culture isn’t ping pong tables. It’s what happens when nobody’s watching:
- Code review everything — even founder’s PRs
- Post-mortems without blame — “what broke the system?” not “who broke it?”
- Document decisions — TDRs for anything you’ll forget in 6 months
- Ship weekly — momentum is a culture
These habits compound. Teams that review code at 5 engineers still review at 50. Teams that skip it at 5 never start.
Phase 2: Growth (5-20 Engineers)
The product works. Now you need to ship faster without shipping bugs faster.
Structure: Feature Teams Emerge
Product Engineering
├── Team A (User-facing features)
├── Team B (Core platform)
└── Platform/Infra (shared services, CI/CD, observability)
We resisted formal teams until ~8 engineers. Before that, everyone knew everything. After, ownership blurred and PRs sat unreviewed because “someone else knows that area better.”
Roles that appeared:
- Tech Lead — technical direction for a team, still codes
- Engineering Manager — people, process, hiring (first EM around engineer #12)
- Staff Engineer — cross-team architecture (around engineer #18)
Don’t hire managers too early. Don’t wait too long either. Around 10-12 engineers, someone needs to focus on people full-time or engineering quality suffers.
Process: Enough to Prevent Chaos
Development:
- Feature branches + PRs (required)
- CI on every PR (tests + lint, no exceptions)
- Deploy to staging automatically; production with approval
Planning:
- Weekly sprint planning (1 hour max)
- Async daily updates in Slack (not standup meetings—remote-friendly)
- Retrospectives every 2 weeks (actually act on action items)
What we tried and killed:
- Estimation poker (too slow for our pace)
- Mandatory standups (replaced with async updates)
- Jira for everything (GitHub Issues was enough until ~15 engineers)
Tooling That Earned Its Keep
- GitHub — code, issues, projects, CI
- Slack — with norms (threads required, channels per team)
- Datadog — monitoring from day one of production
- Sentry — error tracking (free tier → paid when needed)
- Notion — docs, onboarding, runbooks
Tooling rule: adopt when pain is real, not anticipated. We didn’t buy Kubernetes until we had deployment pain, not before.
Phase 3: Scale (20-50 Engineers)
Coordination cost exceeds individual contribution cost. Architecture decisions have blast radius.
Organization Structure
Engineering
├── Product Engineering (feature teams by domain)
├── Platform Engineering (infra, data, developer experience)
├── Security (reviews, compliance, tooling)
└── QA/Testing (embedded in teams + platform test infra)
Management layer:
- Engineering Managers (1 per 6-8 engineers)
- Tech Leads (1 per team, senior ICs)
- Staff/Principal Engineers (architecture, standards, mentorship)
Critical hire: Developer Experience engineer around engineer #25. CI/CD, local dev setup, internal tools. Best ROI hire we made.
Process: Reviews, Not Bureaucracy
Added at scale:
- Design reviews for significant features (30-min doc, async comments)
- Architecture review for cross-team changes
- Security review for auth, payments, PII
- RFC process for major technical decisions
Kept lightweight:
- No approval committees for normal feature work
- No mandatory design docs for small changes
- No sprint velocity tracking (focused on outcomes, not points)
Career Development
We defined levels with clear expectations:
| Level | Scope | Impact |
|---|---|---|
| Junior | Task-level, with guidance | Team |
| Mid | Feature-level, independent | Team |
| Senior | System-level, mentors others | Team + adjacent teams |
| Staff | Cross-team architecture | Organization |
| Principal | Company-wide technical strategy | Company |
Promotion = sustained performance at next level, not tenure. Written rubrics. Calibration across managers. Transparent to engineers.
What Actually Mattered
Hiring
- Hire for slope, not intercept — learning ability beats current skills
- Move fast — 48-hour decision cycle
- Diverse pipelines — different backgrounds, different perspectives
- Trial projects — paid work trials for senior hires (best signal we found)
- Say no to brilliant jerks — culture damage compounds
Onboarding
Bad onboarding wastes your most expensive hires’ first month:
- Week 1: environment works —
docker-compose up, tests pass, first PR merged - Assigned mentor — not manager, a peer they can ask “dumb” questions
- Meaningful first task — real bug or feature, not “read the docs”
- 30/60/90 check-ins — structured feedback
Every new hire updated the onboarding doc. It improved continuously.
Culture Preservation at Scale
What we protected:
- Blameless post-mortems — even when the outage was embarrassing
- Engineering blog — share learnings externally and internally
- Tech talks — monthly, any engineer, any topic
- No hero culture — sustainable pace beats crunch sprints
What we lost (and accepted):
- Everyone knowing everything
- Instant consensus in Slack
- Single shared codebase context
You can’t preserve a 5-person culture at 50. You preserve values, not practices.
Challenges We Hit
Scaling Too Fast
Symptom: Hired 10 engineers in 2 months. Half were unproductive for months. Code quality dropped.
Fix: Hiring pause. Structured onboarding. Mentor program. “No merge without review from someone who’s been here 3+ months” temporarily.
Lesson: Hiring speed should match onboarding capacity.
Technical Debt Avalanche
Symptom: Features shipped fast early. At 30 engineers, everything was slow because of accumulated shortcuts.
Fix: 20% time for tech debt (real, not theoretical). Tech debt register in GitHub Issues. Architecture reviews caught new debt before it landed.
Lesson: Debt is a loan. Start paying interest before it’s crushing.
Communication Silos
Symptom: Teams didn’t know what other teams were building. Duplicate work. Integration surprises.
Fix: Weekly engineering all-hands (30 min). Shared roadmap in Notion. Cross-team liaison on large projects.
Metrics We Tracked (Not Worshipped)
Delivery:
- Deployment frequency (target: multiple per week per team)
- Lead time for changes (commit to production)
- Change failure rate (% of deploys causing incidents)
Quality:
- Incident count and MTTR
- Test coverage on critical paths (not vanity 100%)
- Code review turnaround time
People:
- Onboarding time-to-first-PR
- Retention (especially first-year)
- Engagement survey scores
DORA metrics are useful directional indicators. They’re not goals. Optimizing deployment frequency alone just means you ship bugs faster.
Conclusion
Building an engineering organization from zero is a sequence of different problems. Phase 1: find generalists who ship. Phase 2: add structure before chaos wins. Phase 3: invest in platform, career growth, and coordination.
There’s no perfect org chart. Spotify’s model might not fit your company. Google’s processes will crush a 10-person startup. Copy principles, not org charts: ownership, code review, blameless learning, hire for slope, document decisions, and adapt process to team size.
We went from 3 to 50. The engineers who joined at 5 and stayed to 50 were the culture carriers. The processes changed three times. The values—ship quality software, own outcomes, help each other—didn’t.
Start with people who care. Add process when pain appears. Remove process when it stops helping. That’s the whole playbook.
Building engineering organizations from December 2020, covering hiring, culture, processes, and scaling.