Get AI summaries of any video or article — Sign up free
10 regrets of experienced programmers thumbnail

10 regrets of experienced programmers

Fireship·
5 min read

Based on Fireship's video on YouTube. If you like this content, support the original creators by watching, liking and subscribing to their content.

TL;DR

Treat code as a maintenance liability: every new line increases future work, risk, and debugging burden.

Briefing

Experienced programmers, asked what they’d regret most, point to a common theme: the biggest costs in software careers come from avoidable trade-offs—too much complexity, too little follow-through, and priorities that distort what “real” progress looks like. The most urgent regret is writing more code than necessary. Code isn’t treated as an asset; it becomes a long-term liability that must be maintained, tested, and kept from breaking production. Beginners tend to add abstractions and features as they learn, but seasoned developers often circle back to “less is more,” where total lines of code drop while productivity rises. Even so, the regret isn’t simply about brevity—it’s about minimizing the time others spend wrestling with messy systems. Complexity can feel like genius in the moment, but it often taxes readability, performance, maintainability, testability, and reusability over time.

The second major regret is starting too late. Learning is portrayed as biologically easier when younger, with employers allegedly showing bias toward younger developers because their skills are more “malleable.” The message is blunt: the best time to learn is as early as possible, but the second-best time is now. That same urgency shows up in project management: many programmers regret not finishing more work. Software timelines routinely expand—captured through the “9090 rule,” where being 90% done still leaves 90% remaining. Solo developers can also get distracted, abandoning half-built projects to start new ones, leaving behind directories of abandoned attempts.

Other regrets target career strategy and fundamentals. Some wish they’d pursued a computer science degree less for learning and more for networking and internships, while warning that degrees can become traps when they don’t translate into employable skills. Others look back at missed financial bets—most notably buying Bitcoin early—while using those stories to highlight how easily opportunities are lost. A more technical regret is not learning lower-level languages like C. Even if a career can be built with high-level tools such as Python and JavaScript, the argument is that C provides a foundation that improves everything built on top of it.

There’s also a nuanced stance on JavaScript: using it across the stack can speed development and iteration, even if it’s not the most CPU-efficient or memory-safe option on servers. In contrast, another regret is “grinding” algorithm practice without connecting it to real outcomes—like spending hours on LeetCode brute-force solutions when the real payoff might be teaching others or building practical skills.

Finally, the regrets broaden beyond code. Many wish they’d prioritized health earlier because long hours at a desk, combined with stress and poor diet, can raise serious long-term risks. And the deepest existential regret is learning to code at all—when work starts to feel like vaporware tied to KPIs rather than meaningful impact. The closing note contrasts that fear with a small, tangible win: fixing a production bug, even if it created a few more, as proof that software work can still be real when it improves something that matters.

Cornell Notes

The core message is that experienced programmers regret predictable traps: writing too much and too complex code, starting too late, and failing to finish projects. Code is framed as a liability that must be maintained, so “less” and simplicity matter because they reduce the time others spend fixing and understanding systems. Learning earlier is portrayed as easier and hiring can favor younger developers, but the second-best time to start is still now. Many also regret algorithm grinding and wish they’d invested more in fundamentals (like C) and in health, since desk work and stress can compound into serious risks. Underneath it all is a worry that coding can become meaningless KPI-driven vaporware unless it connects to real impact.

Why do experienced programmers regret writing “more code,” and what does “less is more” actually mean in practice?

They treat code as a long-term liability, not an asset: every added block must be maintained, tested, and kept from breaking production. Beginners often write more because they’re still learning and adding abstractions; later, productivity can rise as total lines of code fall. The regret isn’t only about fewer lines—it’s about reducing the time others spend dealing with complexity. Simplicity is presented as a goal, but it comes with trade-offs across readability, performance, maintainability, testability, and reusability.

What is the “9090 rule,” and how does it explain unfinished projects?

Software timelines expand beyond initial estimates. The “9090 rule” claims that when someone feels 90% done, there’s still 90% left to go. Unexpected issues and scope creep are common, especially for solo developers who may get distracted and abandon work to start something new. The result is a backlog of partially completed projects and wasted hours with little to show.

How does the transcript connect learning to age and hiring dynamics?

Learning is described as easier when young because the brain is more optimized for acquiring new skills. As people get older, learning ability is portrayed as diminishing, and tech hiring is said to show age bias—favoring younger programmers with more “malleable” brains. The claim is that the median programmer age is around 30, implying many employers prefer early starters. Even with that bias, the advice remains to start now if not earlier.

Why is learning C recommended even for programmers who can build careers with high-level languages?

The argument is that high-level languages like Python and JavaScript can support an entire career, but not learning lower-level fundamentals can leave gaps. Learning C basics is positioned as easier than expected and valuable for building a strong foundation. The transcript uses a milestone idea—writing a first “Segal” (as stated)—to mark becoming a “real programmer,” emphasizing that understanding lower-level mechanics improves everything built afterward.

What’s the stance on using JavaScript on the server, and what trade-offs are acknowledged?

JavaScript on the server is defended because it enables faster development and iteration through a single language across the stack (browser, mobile, desktop, and server). The transcript acknowledges downsides: potential CPU/memory inefficiency, lack of true type safety, and npm packages that may try to mine crypto on servers. Still, the speed of iteration is treated as the deciding benefit.

Why does health come up as a programming regret?

Desk work is framed as inherently unhealthy, comparable to other risk factors when combined with stress and a poor diet. The transcript warns that heart risks can rise by the time someone reaches 30. It also offers practical mitigations: standing desks, regular breaks, and avoiding certain products (specifically mentioning Prime) due to alleged cancer-causing PFAS exposure. Improved physical health is linked to better mental health and sharper focus, which then supports better programming.

Review Questions

  1. Which regrets are primarily about technical choices (like code complexity or language fundamentals) versus personal habits (like health and finishing projects)?
  2. How does the “9090 rule” change how someone should plan and measure progress on software projects?
  3. What trade-offs are presented for using JavaScript across the stack, and how do those trade-offs compare to the argument for learning C?

Key Points

  1. 1

    Treat code as a maintenance liability: every new line increases future work, risk, and debugging burden.

  2. 2

    Pursue simplicity to reduce the time others spend wrestling with complexity, not just to shorten code.

  3. 3

    Start learning as early as possible, but begin immediately if you haven’t—age bias in hiring is a real factor.

  4. 4

    Finish projects with realistic expectations; software often follows the “9090 rule,” where “almost done” still means most work remains.

  5. 5

    Build fundamentals with lower-level understanding (like C) even if your career uses high-level languages.

  6. 6

    Use JavaScript across the stack when it speeds iteration, but recognize server-side trade-offs like efficiency and type safety.

  7. 7

    Protect health to sustain long-term performance; desk time plus stress and diet can compound into serious risks.

Highlights

Code is framed as a liability: every abstraction and feature becomes future maintenance and potential breakage.
The “9090 rule” captures why projects stall—feeling 90% done often means 90% of the work is still ahead.
JavaScript on the server is defended for speed and consistency across the stack, despite efficiency and type-safety drawbacks.
Health is treated as a programming prerequisite: standing desks and breaks are offered as practical risk reducers.
The most existential regret is losing sight of meaningful impact and ending up with KPI-driven “vaporware.”

Topics

  • Code Complexity
  • Project Completion
  • Learning Early
  • Language Fundamentals
  • Health and Focus

Mentioned