Resources on Refactoring
Refactoring – “improving the design of existing code without changing its behavior” – is a key skill in developing software. These resources can help you improve.
Exploring Extreme Programming
Refactoring – “improving the design of existing code without changing its behavior” – is a key skill in developing software. These resources can help you improve.
Evolutionary design is a strategy to enable incremental delivery of capabilities. Consider two delivery strategies. In one, we plan everything we need, develop, then deliver when everything is ready. In the other, an incremental strategy, we first deliver a minimal Continue reading Evolutionary Design: Techniques and Example
This article (originally published in Better Software) explores generalization in TDD. The basic notion is that refactoring sets out to not change the behavior of code for any of its inputs, but TDD sets out to change behavior (in the Continue reading Refactoring and Generalization in TDD
When you clean up code, you often need refactorings that aren’t in any tool, and aren’t in Martin Fowler’s Refactoring catalog. You’re on your own. When this happens, think like a language lawyer and a logician. Language Lawyer and Logician Continue reading Home-Grown Refactorings – Be Careful!
How do stories fit in with other stories, or small stories with bigger ones? How can we move from skinny stories to richer ones? This is part of Scalability of stories. One way to think about story relationships is to Continue reading Connecting Stories
We’ll look at Test-Driven Development (TDD) and Test-Commit-Revert (TCR) in terms of how they work with frequent commits to source control. Test-Driven Development (TDD) Test-Driven Development is often described with this cycle: Red-Green-Refactor (or Red-Green-Gold, as I learned from Alex Continue reading TDD, TCR, and Frequent Commits
How do you think about stories? We’ve talked about different levels of stories. Scalable stories let us gradually increase the intensity and utility of system behaviors. As before, I’ll use LinkedIn.com for examples. (This is a reverse-engineering exercise; I have Continue reading Scalable Story Examples
Stories Have Multiple Granularities User stories may seem like they are about specifications but they’re really a lightweight way to explore possibilities. Many teams get too focused on the “card” aspect, using tools to turn user stories into an atomized Continue reading Multi-Level Stories
Kent Beck’s TCR workflow experiment has generated some good discussion. Rachel Carmena has documented several TDD workflows. I’d like to add an approach that I’ve used for a while: “Call Your Shots”. Call Your Shots If you’re playing pool seriously, you don’t just Continue reading The “Call Your Shots” TDD Workflow
Teams often don’t pay enough attention to language. A team can improve its language by using what Eric Evans calls Ubiquitous Language: “A language structured around the domain model and used by all team members to connect all the activities Continue reading Ubiquitous Language – A Triple-Play for Words