NOTE: you can use the left and right arrow keys to navigate between pages of this book. They do the same thing as the "Prev" and "Next" links.
This is an early early draft and I would love to get your feedback on it. Send it to:
You can subscribe to bensguide.substack.com to get notified when new chapters are available.
Table of Contents
- Preface
- Fundamentals
- Techniques
- Principles
- Views
- Principle: Empiricism
- View: Judgment
- Technique: Say Why ✥
- View: Humans, Not Humanoids
- View: Software Development Systems
- View: Information Flows
- View: Centers
- View: Forces, Not Requirements
- View: Conflict
- Principle: Adaptation
- Principle: Fast Feedback
- Principle: Small Steps
- Principle: Feeling
- Principle: Autonomy
- Technique: Build Trust ✥
- Software Development
- Programming
- Programming vs. Software Development vs. Software Engineering
- NaiveProgramming.html
- View: Computation
- View: Structure and Behavior
- View: The Software System
- IncrementalChange.html
- View: Code is for Humans
- Exploration.html
- Conflict.html
- View: Design
- View: Controllability, Not Correctness
- DifferentiationNotAccretion.html
- ProcessNotAProject.html
- Semilattice.html
- LivingSystemNotAnArtifact.html
- Wholeness
- LifeAndDeathOfSystems.html
- InformationFlow.html
- ConstantImprovement.html
- ImprovementIsChange.html
- SmallSteps.html
- StartWithTheEasyChange.html
- ChangeSomething.html
- Reversibility.html
- SafeChange.html
- PositiveFeedbackLoops.html
- View: The Alignment Trap
- TwoKindsOfWork.html
- BalancedWork.html
- MutualBenefit.html
- BugsVsFeatures.html
- Sleep.html
- ToTheExtentThat.html
- Technique: Personal Projects
- Technique: The Fundamental Development Process
- Untitled.html
- Starting a Project
- ProjectTemplate.html
- Technique: Start with a Walking Skeleton ✥
- ConstantTooling.html
- VersionControl.html
- DohertyThreshold.html
- AutomaticDevSetup.html
- ReproducibleBuild.html
- DevEnvironment.html
- 400MillisecondFeedback.html
- PassiveFeedback.html
- CallYourShot.html
- ReadmeDrivenDesign.html
- Prototype.html
- Spike.html
- SeparateFastAndSlowTests.html
- SystemTest.html
- SmokeTest.html
- ContinuousIntegration.html
- SemiAutomatedRelease.html
- HumanInTheLoop.html
- MakingCodeVsShippingCode.html
- InceptionMeeting.html
- EntrypointDocument.html
- What's Your Architecture?
- Changing Code Within One Function
- Behavior.html
- Structure.html
- SeparateBehaviorAndStructureChanges.html
- Technique: Design For Today, Not Tomorrow
- Technique: Paragraphs of Code
- View: Simple Code
- Refactoring.html
- TestCoverage.html
- MutationTesting.html
- CharacterizationTest.html
- EmpiricallyMotivatedChange.html
- Centers.html
- LatentCenters.html
- WeakAndStrongCenters.html
- StrengthenLatentCenters.html
- Wholeness.html
- TheMirrorOfTheSelfTest.html
- ChunkingAndLevelsOfScale.html
- OrganizeCodeForChunking.html
- OneThingAtATime.html
- DuplicatedCode.html
- Symmetry.html
- DeadCode.html
- Testing.html
- SimplicityAndOccamsRazor.html
- ReproduceBugs.html
- AutomatedTests.html
- SimpleTypesUniformBehavior.html
- Technique: Pair Delimiters ✥
- Technique: Symmetrize Similar Code
- View: Steps
- Changing Code Across Functions
- FirstTestAtAnExistingBoundary.html
- ChangeTogetherLiveTogether.html
- CallGraph.html
- Processes.html
- SystemCalls.html
- Effects.html
- Dependency.html
- DependencyGraph.html
- CouplingAndCohesion.html
- State.html
- Objects.html
- ObjectsForCaching.html
- ObjectsForLaziness.html
- ObjectsAsStateMachines.html
- TypesAsSets.html
- DesignIsAlwaysIncomplete.html
- TodoComment.html
- TesseractOrganization.html
- ImmutableData.html
- UpdatingImmutableData.html
- TestsNextToProductionCode.html
- ShallowHierarchy.html
- Concerns.html
- SeparationOfConcerns.html
- AlignAbstractionsWithSeams.html
- BrittleTests.html
- WorkingOnATeam
- Teams.html
- Projects.html
- ContinuousIntegration.html
- ContinuousDeployment.html
- ContinuousDelivery.html
- ContinuousRelease.html
- Technique: Demo UI
- Ownership.html
- Technique: Canonical Library
- Technique: Exploratory Testing
- Further Reading