Visual summary of operating lessons from Kent Beck.

Lessons from Kent Beck

Kent Beck created Extreme Programming and formalized Test-Driven Development. He established the baseline routines of modern programming, from unit testing frameworks to continuous refactoring. This collection covers his methods for managing code complexity and his core premise that software design is a human problem.

Part 1: Philosophy & The Nature of Programming

  1. On Habits: "I'm not a great programmer; I'm just a good programmer with great habits." — Source: [Y Combinator]
  2. On Craft: "The craft of programming begins with empathy, not formatting or languages or tools or algorithms or data structures." — Source: [SoftwareQuotes]
  3. On the True Goal: "Listening, Testing, Coding, Designing. That's all there is to software. Anyone who tells you different is selling something." — Source: [Goodreads]
  4. On Progress: "In software development, 'perfect' is a verb, not an adjective. There is no perfect process. There is no perfect design. There are no perfect stories. You can, however, perfect your process, your design, and your stories." — Source: [Goodreads]
  5. On Optimization Workflow: "Make it work, make it right, make it fast." — Source: [Dev.to]
  6. On Problem Solving: "Most programming is not about going up on the mountaintop, being struck by lightning, and bringing down 'the answer' carved on stone tablets. Most programming is applying yesterday's solutions to today's problems." — Source: [C2 Wiki]
  7. On Clarity: "Whenever I have to think to understand what the code is doing, I ask myself if I can refactor the code to make that understanding more immediately apparent." — Source: [Goodreads]
  8. On Mental State: "Software development is a game of insight, and insight comes to the prepared, rested, relaxed mind." — Source: [Goodreads]
  9. On Motivation: "I don't write to make money; I make money with writing so I can afford to write." — Source: [Substack]
  10. On Emotional Attachment: "One of the great frustrations of my young engineer's life was starting a project with great excitement, then watching the code base decay over time." — Source: [Goodreads]

Part 2: Test-Driven Development (TDD)

  1. On Fear: "Write tests until fear is transformed into boredom." — Source: [Goodreads]
  2. On Assumptions: "TDD rests on a charmingly naïve geekoid assumption that if you write better code, you'll be more successful." — Source: [Goodreads]
  3. On Steering: "Are the teeny-tiny steps feeling restrictive? Take bigger steps. Are you feeling a little unsure? Take smaller steps. TDD is a steering process—a little this way, a little that way." — Source: [Goodreads]
  4. On Asking the Computer: "Rather than apply minutes of suspect reasoning, we can just ask the computer by making the change and running the tests." — Source: [Y Combinator]
  5. On Elegance: "Those whose souls are healed by the balm of elegance can find in TDD a way to do well by doing good." — Source: [Goodreads]
  6. On Economics of Testing: "If testing costs more than not testing, then don't test." — Source: [AZ Quotes]
  7. On Purpose of Testing: "Testing is not the point. The point is about responsibility." — Source: [AZ Quotes]
  8. On Confidence: "I get paid for code that works, not for tests, so my philosophy is to test as little as possible to reach a given level of confidence." — Source: [AZ Quotes]
  9. On Coverage: "It is impossible to test absolutely everything... You should test things that might break." — Source: [Y Combinator]
  10. On the Payoff: "Testing is a bet. The bet pays off when your expectations are violated." — Source: [Y Combinator]

Part 3: Refactoring & Tidying

  1. On Preparation: "For each desired change, make the change easy (warning: this may be hard), then make the easy change." — Source: [AZ Quotes]
  2. On Timing: "Refactoring is not an activity you set aside time to do. Refactoring is something you do all the time in little bursts." — Source: [Goodreads]
  3. On Definition: "To refactor (verb): to restructure software by applying a series of refactorings without changing the observable behavior of the software." — Source: [LibQuotes]
  4. On Momentum: "The key to effective refactoring is recognizing that you go faster when you take tiny steps, the code is never broken, and you can compose those small steps into substantial changes." — Source: [Goodreads]
  5. On Code Smells: "If it stinks, change it." — Source: [xUnit Patterns]
  6. On Bad Smells as Warnings: "Food might still be okay to eat if it smells bad but smelling bad is a warning. It's also a warning of future problems. If it smells bad today it is going to be poison tomorrow." — Source: [Substack]
  7. On Semantic Distance: "The key is the semantic distance between the method name and the method body. If extracting improves clarity, do it, even if the name is longer than the code you have extracted." — Source: [Goodreads]
  8. On Immediate Value: "Tidying first is a bit of an exception. When you tidy first, you know you will realize the value of tidying immediately." — Source: [Reddit]
  9. On Separating Concerns: "Separate structural tidyings from behavior changes in distinct commits." — Source: [Befreed AI]

Part 4: Software Design & Architecture

  1. On Simple Design Priority 1: "Runs all the tests." — Source: [Dev.to]
  2. On Simple Design Priority 2: "Expresses the intent of the programmer." — Source: [Scribd]
  3. On Simple Design Priority 3: "Contains no duplication." — Source: [Javier Saldana]
  4. On Simple Design Priority 4: "Minimizes the number of classes and methods." — Source: [Dev.to]
  5. On Coupling and Cohesion: "Architecture is the tension between coupling and cohesion." — Source: [Vanderburg]
  6. On Designing for Change: "Almost everything we know about good software architecture has to do with making software easy to change." — Source: [QuestGLT]
  7. On Trajectory: "How good the design is doesn't matter near as much as whether the design is getting better or worse." — Source: [AZ Quotes]
  8. On Single Responsibility: "So much complexity in software comes from trying to make one thing do two things." — Source: [Vanderburg]
  9. On Duplication: "Duplication is a hint, not a command." — Source: [Reddit]
  10. On Timing of Design: "Design is much more about 'when' than 'what'." — Source: [SoftwareQuotes]

Part 5: Extreme Programming & Process

  1. On Change Management: "The problem isn't change, per se, because change is going to happen; the problem, rather, is the inability to cope with change when it comes." — Source: [AZ Quotes]
  2. On Feedback: "Optimism is an occupational hazard of programming; feedback is the treatment." — Source: [AZ Quotes]
  3. On Continuous Improvement: "The XP philosophy is to start where you are now and move towards the ideal. From where you are now, could you improve a little bit?" — Source: [Goodreads]
  4. On the Agile Label: "The problem with that word 'agile' is it's too attractive... nobody wants to be rigid or inflexible, so nobody's ever going to say they're not agile." — Source: [InfoQ Tidy First]
  5. On Predictions: "A plan is an example of what could happen, not a prediction of what will happen." — Source: [AZ Quotes]
  6. On the Waterfall Power Structure: "Waterfall is very much that very legible structure of work... 'it's your responsibility, and I get the rewards, and you pay the penalties.'" — Source: [InfoQ Tidy First]
  7. On Designing After: "The alternative to designing before implementing is designing after implementing." — Source: [Goodreads]
  8. On the TCR Loop: "The idea is pretty simple: The full command then is `test && commit || revert`. If the tests fail, then the code goes back to the state where the tests last passed." — Source: [Marcusoft]
  9. On Step Size in TCR: "TCR forces you to go small and often. I thought I was doing small steps, but I discovered I could make them even smaller!" — Source: [Medium]
  10. On Why to Revert: "It was already wrong, so why not just delete it and you get back to that state where, 'I know how everything works'?" — Source: [GOTO Conferences]

Part 6: Human Relationships & Collaboration

  1. On Design as Relationship: "Software design is an exercise in human relationships." — Source: [Grounded Architecture]
  2. On Responsibility: "Responsibility cannot be assigned; it can only be accepted. If someone tries to give you responsibility, only you can decide if you are responsible or if you aren't." — Source: [Goodreads]
  3. On Hiring: "Given the choice between an extremely skilled loner and a competent-but-social programmer, XP teams consistently choose the more social candidate." — Source: [Goodreads]
  4. On People Over Process: "It is much more important to develop people with the expertise to make wise decisions than it is to develop decision-making processes that purportedly think for people." — Source: [QuestGLT]
  5. On the Nature of Pairing: "It is a conversation at many levels, assisted by and focused on a computer." — Source: [Bookey]
  6. On the Vulnerability of Pairing: "I think this is a large part of the resistance to pair programming is that you have to look stupid in front of another human." — Source: [Hamersoft]
  7. On Peer Pressure: "In times of stress, people skip testing... write a pile of shit just to get a feature in... You think you can do any of that with a partner watching? Not a chance." — Source: [Reilly.dev]
  8. On Team Productivity: "Pairs are more than 2x more productive than 2 people working alone, so it's a net gain." — Source: [Reilly.dev]
  9. On Pair Suitability: "Pairing works when there is sufficient uncertainty in the problem to be solved and the approach to solving it." — Source: [Goodreads]

Part 7: Code Semantics & Implementation Patterns

  1. On Communication: "Readers need to understand programs in detail and in concept. Sometimes they move from detail to concept, sometimes from concept to detail." — Source: [Goodreads]
  2. On Aesthetics: "Aesthetics go deeper than that symmetry. Aesthetics engage more of your brain than strictly linear logical thought." — Source: [Goodreads]
  3. On Framework Design: "It is the framework developer's job to ensure that clients can extend the framework to solve the remainder of their problems. It's tempting to try to solve a broad range of problems with a framework." — Source: [Goodreads]
  4. On Compatibility Costs: "At some point, the cost of maintaining perfect compatibility outweighs the value to clients." — Source: [Goodreads]
  5. On Extensibility: "A framework with all protected fields would be more immediately usable but harder to evolve later." — Source: [Goodreads]
  6. On Compose Method: "The central pattern in the book is Compose Method. ... Once you've done it, people can read and understand what you have done, people can extend what you've done more easily." — Source: [InfoQ]
  7. On Dependencies: "Changing imports is less risky and intrusive than changing code." — Source: [Goodreads]
  8. On Behavior vs. Structure: "The structure of the system doesn't matter to its behavior." — Source: [SoBrief]
  9. On Reversibility: "You need to be much more careful about behavior changes to the system than you are about structure changes, because structure changes are for the most part reversible." — Source: [InfoQ Tidy First]

Part 8: The Economics & Future of Software

  1. On Long-term Velocity: "If you can get today's work done today, but you do it in such a way that you can't possibly get tomorrow's work done tomorrow, then you lose." — Source: [Goodreads]
  2. On Optionality: "Software value comes from both current features and the options you preserve for future work. Optionality is the invisible half of maintainability." — Source: [Maintainable Podcast]
  3. On Future Value: "The future value of a system reveals itself in today's realities, not yesterday's speculation." — Source: [Goodreads]
  4. On the Definition of Failure: "Final means failure. If you have a software system and there's no way for the business to invest more into it in order to achieve more profit, that system is now dead—and that's failure." — Source: [InfoQ Tidy First]
  5. On AI Skill Shifts: "90% of my skills just went to zero dollars and 10% of my skills just went up 1000x... having a vision, being able to set milestones, and keeping track of design to control complexity are hugely leveraged skills now compared to knowing where to put the ampersands." — Source: [InfoQ Tidy First]
  6. On Experimentation: "Nobody knows the answers—not even the people who've been doing this for 30 years. So what do you do? You try things. You experiment cheaply." — Source: [InfoQ Tidy First]
  7. On Target Audience: "If you're happy slamming some code together that more or less works and you're happy never looking at the result again, TDD is not for you." — Source: [Goodreads]
  8. On the Essence of Tools: "I mean, source code in files; how quaint, how seventies!" — Source: [DefProgramming]