Agile Homeschool

My wife and I have been homeschooling our 3 boys since our oldest, who turns 13 tomorrow, started kindergarten. From the beginning, we've tried to apply the Agile, Lean, and accelerated learning principles I use in my work. After 8 years of experimentation, we've settled on a system that works really well for our family. This post isn't about why we homeschool, what curricula we use, etc. Rather, I'd like to give a glimpse into how we apply some of the principles and practices I use and teach in my classes to a non-software context. Read More

Change Happens—So Make it Cheaper

Change on software projects is expensive; it leads to wasteful rework. Change is risk. We can deal with risk one of two ways. We can reduce the likelihood of the negative event occurring. Or we can reduce the impact of the negative event when it does occur. (Of course, the two can often be combined.) The traditional approach says, "Let's put more effort and thought in up-front and avoid that expensive change." (That is, let's prevent the negative event from occurring.) The problem, as decades of experience have shown, is we still can't seem to avoid change. Here's why: the kinds of change that plague software development can't be eliminated by thinking harder up front. Read More

Functional Managers in Agile

As an organization transforms to an agile way of working, functional managers (e.g. a dev manager or a test manager) can feel lost. Many of their traditional responsibilities move to other roles or disappear altogether. How can functional managers continue to add value in an agile organization? Here are a few ideas… Read More

Coaching Surgeons, Cyclists, and Software Teams

Atul Gawande is a surgeon and author who has written some excellent books and New Yorker articles reflecting on the state of modern medicine. Recently, his writing has gone beyond medicine in interesting ways. As he looks for lessons for medicine from other disciplines, he ends up with things to teach both medical professionals and skilled knowledge workers more generally. His book The Checklist Manifesto manages to be a riveting 224 pages on what ought to be one of the least interesting topics possible: the checklist. So I was intrigued to see a link to a New Yorker article from Dr. Gawande on my own specialty, coaching. It's as good as I might have hoped. Read More

Cucumber Tip: IRB From Inside a Step Definition

Most Ruby programmers know about Ruby's interactive console, IRB. (If you don't, stop right here, open up a command window and run irb. Type some Ruby code. See how it returns the result of each line right away.) IRB is great for poking around with unfamiliar libraries. Suppose you're using Capybara with Cucumber for the first time. It would be nice to use IRB to experiment with what Capybara can do on a particular page. You could launch an IRB session and duplicate all the Capybara setup from your Cucumber support/env.rb file. But wouldn't it be nice if you could just fire up IRB in the context of a step definition so you know everything in your IRB session matches what you'd get in the step def? Turns out you can. Here's how... Read More

Building a Useful Task Board

The task board is a simple, yet powerful, tool for Scrum teams. As a coach, I can tell a lot about a team just by looking at their task board in the middle of a sprint. If your Scrum team is in the same location, I can't think of a good reason why you wouldn't want to build and use a task board. Here's how to build a basic task board, various ways to enhance it to convey more information, and some analysis of the many things you can learn from this simple tool. Read More

Cucumber Tip: Key-Value Tables

You may not realize this: Tables in Cucumber steps don't have to have a header row. Sometimes it can work really well to use a headerless table of key-value pairs. Let's look at an example. Suppose we have a scenario that fills out an advanced search form to search for medical providers matching certain criteria. A mockup of the form looks something like this: If we were using the recently deprecated web steps generated by cucumber-rails, we might write steps to perform a search like these: Given I'm on the advanced search page And I select "Endocrinology" from "Specialty" And I choose "Yes" within "Accepts Insurance" And I fill in "ZIP Code" with "90010" And I select "5 miles" from "Search Radius" When I press "Search" But we know better than to do that, right? After all, we're trying to describe how the search logic should work, not how the form should look. Read More

The Future of Cucumber on .NET

Beginning just over two years ago, I worked with some great developers to create Cuke4Nuke as a way to bring Cucumber to .NET. Shortly after the first releases of Cuke4Nuke, TechTalk released SpecFlow, a native .NET tool inspired by Cucumber. As a pure .NET solution without Ruby dependencies, SpecFlow seemed to be easier for Microsoft shops to adopt. But Cuke4Nuke had (to me) enough advantages that I kept it going. By this summer, however, it was clear that SpecFlow had made up for most of Cuke4Nuke's advantages and had more momentum in the .NET community and was under much more active development. Read More

Why Longer Sprints Probably Won’t Help

As a coach, I'm frequently told, "Our sprint length is too short. We want to change it from X to Y weeks." The time box—the sprint in Scrum, the iteration in XP and other iterative methods—is one of the most powerful tools in agile software development for revealing problems in a team or organization. Notice I said reveal, not fix. I've seen a few cases where the sprint length really was too short. More often, though, the feeling that the sprint is too short is a sign of deeper problems. Lengthening the sprint might push these problems back under the surface, but it's unlikely to actually solve them. Before you increase your sprint length, ask "Why?" a few times to see if you have any of the following underlying issues, and try to deal with those first. Maybe your sprint really is too short. But don't start there, lest you miss an opportunity to improve. Read More

Getting Started with Ruby, Cucumber, and Capybara on Windows

The Ruby version of Cucumber isn't just for Rails developers. If you have a .NET or Java web or service app, Ruby can be a great language for testing. With libraries like Capybara for driving web apps and JSON, RestClient, SOAP, and others for interacting with service apps, you'll find testing in Ruby requires much less code than in C# or Java. It can be hard to find instructions for setting up Ruby and Cucumber on Windows, though, so I've compiled these to help my clients get started, and I thought they might be useful to others. I've tested this on a clean Windows 7 VM, and everything works. Your mileage may vary, but let me know if you have any issues. Read More