On September 20, 2017, Hurricane Maria made landfall in Puerto Rico as a category 4 hurricane. It has been called the worst natural disaster ever to hit Puerto Rico. Six months later, over 100,000 utility customers don’t have electricity, and over 17,000 utility customers still don’t have running water. (I was fortunate to have my power restored in February, just shy of the five-month mark.)
But, as always, there are positive things we can learn from this disaster. Some of them can even be applied to agile development. I would like to share them with you.
Preparation is essential
During the days immediately following the hurricane, there was an extreme shortage of food, potable water, and fuel. I saw a line more than half a mile (0.8 kilometers) long at one gas station. Many people desperately awaited supplies from the government, some of which had to be delivered by air because the roads were impassable. But there were also people who managed to make do for a few weeks while the situation stabilized. They were, in large part, people who had stored at least a short-term emergency supply of food, water, and other essentials in their homes because they knew that someday they might need them.
A core tenet of agile is that we expect and embrace change. We know that things will change before we finish a project, even though we don’t know exactly what or how or when. And although this ambiguity might not allow us to make detailed plans for more than a few weeks out, we can prepare for those inevitable changes by doing things like the following:
- Delaying major decisions until the last responsible moment to avoid being locked into a design that can’t accommodate new requirements
- Monitoring our team’s velocity or throughput to know whether we will be able to handle a sudden surge of work
- Getting feedback early and often from our stakeholders in order to minimize the amount of rework needed when requirements change
- Not setting unrealistic expectations by committing to a project that has a fixed schedule, scope, and cost
Doing those things might not provide an immediate benefit. They might even feel like unnecessary work or impediments to good relationships with stakeholders, just like putting away a little extra food and water might seem pointless at the time. But when the storm — or changes in requirements — comes, you will be glad you did.
You are more flexible and adaptable than you think
While running water was restored, many people resorted to washing laundry by hand and using rainwater for flushing or bathing. I put together a few PVC pipes to redirect rainwater from a roof gutter to the window above my shower. (Friendly advice: It’s a good idea to add a valve so your bathtub doesn’t overflow if it starts raining when you’re not at home.) Those who could run their refrigerator with a power generator for a few hours a day had to be careful not to open the refrigerator too often while it was turned off in order to keep the cold air inside. We all had to make adjustments, but we figured things out and got through it.
During one of my first projects as an inexperienced developer, I was struggling with loading some data sets into a database. My team lead told me that there were many ways of doing it and that I should “push the envelope.” I couldn’t see many ways of doing it at the time. But bit by bit, even after the project ended, I realized he was right. And I am sure that whatever difficult requirements you have in your own projects, there is at least one way (and probably more) to meet them, and you can figure it out.
One of the beautiful things about software development is that you are dealing with, as Fred Brooks put it in The Mythical Man-Month, “nearly pure thoughtstuff.” We talk about “building” applications, but we’re really just moving bytes around that are almost infinitely malleable. Whatever requirement you are dealing with, there is almost always a way to do it. The solution to the requirement might not always be elegant or efficient. It might be throwaway code that no one will ever use again a month from now. But when changes and challenges inevitably come, trust in your ability to adapt and find creative solutions.
And, above all, focus on solving the customer’s problem rather than making sure the solution fits some pattern or best practice. Did I like taking a shower with yellow water that left me itchy? Would I recommend it as a best practice to anyone? No. But I was able to take a bath, and that was the important thing.
Resources are of little use without a plan
This is related to the “Preparation is essential” point above. For several years before the hurricane, I had been stocking up on what I thought were essential items. I had loads of pasta, rice, canned food, and hygiene items. But soon after the storm, I realized I had overlooked one simple, critical thing: water. I had enough water stored for drinking, but I had not considered the water required for cooking and washing kitchen utensils as well. I had a barrel of water in my yard that collected rainwater from a gutter, but that water was greenish, moldy, and probably had bugs in it. Useful for flushing the toilet, but not safe for human consumption. I tried filtering it with kitchen rags like the survivalists say, but all I ended up with was green water and wet kitchen rags. If I had done more thorough planning, and even practiced living off my storage for a few days, I would have realized what I was missing and could have prepared better.
Due to our focus on “responding to change over following a plan,” agile has been accused of not planning enough. We cannot allow that misconception to be true in our teams. We cannot just improvise our way through a project because we think we have talented developers or because agile says so. Planning is how you ensure that you have the right resources — whether it be information, developers, development tools, anything you need to be able to do your work — before you use them. Planning is how you mitigate risks. It is what lets you be proactive even in a changing environment.
Of course, we won’t try to make detailed plans about requirements a year ahead of time, just like I won’t plan today which box of matches I will use when the next hurricane hits. But I will plan based on what I know, on reasonable assumptions about the future, and on information I receive from subject matter experts like meteorologists. We need to do the same thing in our development teams and with our customers. (Except that your subject matter experts probably aren’t meteorologists. But if they are, that’s awesome and I would love to hear about it.)
If you follow these principles, you and your team will be in better shape to face whatever challenges, weather-related or otherwise, that you encounter.
My life is mostly back to normal, but many people are still struggling with the consequences of Hurricane Maria. If you would like to help, you can donate here. The donation is tax-deductible in the United States.