"If at first you don't succeed, try, try again." It's an old cliché that has proven especially applicable to successful engineering projects. Thomas Edison owned over 1000 patents, most of which never amounted to anything useful. WD-40's name is short for "Water Displacement, Formula 40," implying it was preceded by 39 failures. And Steve Jobs oversaw the release of numerous underwhelming products before he changed the world with the iPhone.
But in its earliest days, software engineering took a different approach.
Instead of learning from trial and error, someone decided it would be a great idea to spend a lot of time compiling voluminous documentation, requirements, and project plans. The idea was that, once the even lengthier coding period began, everything would go right the first time because everything had been so well planned. This was “too big to fail” before it was a meme. When the work was finally completed -- sometimes years later -- everyone hoped the end product was still somehow relevant. (Spoilers: it rarely was.)
The term for this kind of lengthy, plodding software development process is waterfall. The process got this name because each phase of the process -- requirements gathering, design, development, and testing -- flows into the next one. Eric Evans, a software engineering thought leader, once said "waterfall" is actually a very good name for this very flawed software design philosophy. You're going about your business, paddling down the river, and then one day -- boom! You go over the falls.
For a few reasons, we realized early on while developing our financial software for lenders that waterfall could not realistically be a part of defi's engineering culture:
- Providing freedom to financial lenders means being responsive to change. It's folly to expect that a project's requirements will be perfect and complete two months after they're written -- or even two weeks later, or maybe even two days later.
- Who has time to wait? At defi, we must move fast. What lender has time to wait a year for a software project to be fully coded or fully documented?
- A waterfall process is very much sequential. It's perfect for certain kinds of projects for which making changes after initial construction is very costly, or impossible. But code is the most malleable construction material ever invented. It isn't cheap to change software, but it's far cheaper than re-pouring a football stadium's foundation after its frame is half built.
What's the alternative? At defi SOLUTIONS, we embrace the opposite of sequential, waterfall development: iterative software engineering. Software developed in an iterative manner is neither designed nor built in one large chunk. Instead, the smallest possible pieces are planned and manufactured one at a time in short, frequent iterations.
Now this is a process conducive to providing freedom!
Feedback early and often
With iteration, we receive feedback from our clients much earlier in the process, and much more often. This helps us to identify gaps between what our clients want and what we think they want as early as possible.
For example, say we are asked to build a blue vehicle with two wheels, a seat, and handlebars.
We imagine one thing.
Our client wants another.
The problem isn't always that we misunderstand our client's desires. Sometimes it just takes visualizing an early prototype of a product to realize what you asked for isn't really what you wanted after all. The earlier these gaps and misunderstandings are identified, the less costly they are, both in resources and in time.
Collaboration and openness are the only ways to get a handle on the change that inevitably occurs in projects.
Aside from early and frequent feedback, another benefit of defi's iterative process is the constant delivery of value. At the end of each of our iterations, something new is available.
The completion of a desired software feature may truly be a very lengthy effort. It might take months for every bell and whistle to be available. But seeing at least a small bit of new software every week or two is far better than waiting a year or more to see all of it.
defi's iterative development philosophy allows our clients to give us frequent feedback and allows us to give them frequent deliveries. But another benefit of the process is far more self-serving: it's easier!
Smaller goals aren't nearly as daunting as larger ones. Any parent knows the futility of asking a child to clean her bedroom when it looks like a bomb full of clothes and toys blew up inside it. Not knowing where to begin with such a mess, the child simply refuses to clean the room. Or, she tries but finds herself daunted and paralyzed into inaction. Only when the parent directs the child to put away just one item at a time is the room quickly decluttered.
At defi SOLUTIONS, we call this "small stories." The work of providing freedom and flexible lending software is often difficult and complex, but we do our best to break down that work into tasks small enough for a single engineer to complete in a single day. Our developers rarely have a day in which they "just did some work." When we reflect on our days, we look back at what we got done.
Water still makes a good metaphor
Eric Evans has a water-based analogy for iterative software development. Rather than a waterfall, he describes it as being like a whirlpool. When a need for change becomes evident, all the relevant players -- the clients, the product managers, the developers -- enter the proverbial whirlpool. They spin ideas between themselves, settle on a final set of requirements, build the product, and ship it. And then they all get out of the water. Later, when something else is needed, it's back into the whirlpool.
Iterative development is a core part of defi's engineering culture because we like giving freedom to our customers in small pieces, frequently, and quickly. Also, we much prefer a relaxing dip in a whirlpool to a harrowing descent over the falls.
* * *
Michael Ripplinger, a senior software developer with defi SOLUTIONS, has been in the software engineering industry for more than15 years as a developer, team lead, and architect. Mike calls software one of the most powerful tools ever invented and believes its ability to transform businesses and lives has barely been exploited.
Also read from Mike Ripplinger: