Why maintaining a codebase is so damn hard – with OhMyZSH creator Robby Russell [Podcast #207]
TL;DR
Robby Russell, creator of OhMyZSH, explains why software maintenance consumes nearly all development time, as engineers constantly navigate inherited technical decisions while organizations struggle with repository sprawl, orphaned code, and the risks of tacit knowledge walking out the door.
🔧 The Maintenance Reality 3 insights
Developers live inside inherited decisions
Most software work involves navigating constraints from predecessor choices, former self decisions, and existing architecture rather than building from scratch.
Greenfield development is statistically rare
Russell estimates developers spend 99% of their time maintaining existing codebases rather than starting new projects, even when building new features.
Maintenance extends beyond bug fixes
Adding features to existing systems constitutes maintenance because it requires working within established technical constraints and legacy architecture.
📦 Repository Sprawl & Orphaned Code 3 insights
Organizations accumulate abandoned repositories
Companies often maintain 80+ repositories where the majority are untouched for years, creating confusion about what is deployed, what is safe to archive, and what dependencies remain active.
Forking creates permanent hidden burdens
Teams frequently fork third-party libraries to patch urgent bugs, creating long-term maintenance responsibilities when those forks aren't merged back upstream or properly documented.
Code lacks clear ownership
When developers leave organizations, they often take irreplaceable tacit knowledge with them, leaving behind codebases that require forensic analysis to understand architectural decisions.
⚖️ Strategic Maintenance vs. Rewrites 2 insights
Rewrites risk institutional amnesia
Starting fresh underestimates the complexity embedded in production systems and often represents an expensive way to forget lessons learned from years of iteration.
Production complexity is invisible until lost
Teams routinely underestimate the time and energy invested in existing working systems, viewing rewrites as cheaper than refactoring until they rediscover edge cases the hard way.
Bottom Line
Treat maintenance as the primary job of software engineering by documenting architectural decisions and distributing knowledge across teams, rather than betting on risky rewrites or accepting accumulation of orphaned code.
More from freeCodeCamp.org
View all
Notion Workers – Full Tutorial 2026
Notion Workers enable custom automations and external data integrations through code, but this tutorial demonstrates how AI tools like Claude Code and Codex allow non-developers to build and deploy three functional workers without traditional programming knowledge.
Build Your Own OpenClaw Using Vercel, Composio, Supermemory
This tutorial demonstrates how to build a production-ready AI agent inspired by OpenClaw using Next.js and the Vercel AI SDK, integrating Composio for external tool access and Supermemory for persistent conversation learning, all deployable via Vercel with AI-assisted development in Cursor.
Build a Self-Healing CI/CD Pipeline with AI
This tutorial demonstrates how to build a self-healing CI/CD pipeline that leverages N8N and OpenAI to automatically detect build failures, analyze error logs, generate code fixes, and open pull requests without manual intervention.
Web Scraping for Beginners – Extract Data with an API
Anna Kubo demonstrates how to bypass common web scraping obstacles like CAPTCHAs and bot detection by using the SER API to extract structured data from Google Search, YouTube Shorts, and Google Lens with minimal code.