The spare room in my house is big enough to hold a queen-sized bed and little else. After five years of being a seldom used guest bedroom, I convinced my husband that we could turn it into a home gym. He hesitantly agreed with one condition: we had to put a murphy bed in the room that guests could use. I decided that was a fair compromise, and a few days later several large boxes arrived at our doorstep that would one day become a hidden bed.
As we assembled the bed, I noticed several similarities between assembling furniture and delivering software.
Lesson 1: Just In Time Development
I was not actively working out at home when I had the idea to create a workout room.
I was convinced the lack of dedicated space was the only reason.
If I just had a place I could set up a yoga mat and store the random exercise accoutrement I had acquired over the years, surely I would reach my fitness goals.
I purchased our murphy bed as soon as I had the idea to create a workout room. As a result, the pile of boxes sat in my living room for months. They eventually made their way upstairs to the guest room where they sat for several more weeks. My problem was that I hadn’t found a routine that worked for me, not that I lacked space to work out. After several days of getting up early to work out in my bedroom and watching yoga videos on my bedroom TV, I decided I was committed to doing yoga regularly and it would be easier to do if we finally finished converting the guest room. At that point, I knew exactly what I needed the room to be and how I would use it.
There is an agile principle known as just in time development. The idea behind this principle is that business needs change rapidly and software design is a complicated process. Companies should avoid designing large complicated solutions prior to developing and instead focus on a simple, iterative development approach. Focus on immediate business needs and delivering value quickly. Businesses that tackle problems in non-optimal chunks run the risk of devoting resources (both time and money) to work that is not needed. An iterative approach leads to a higher quality product with more accurate requirements. Start simple and look for ways to quickly deliver value.
Lesson 2: Design Proper Architecture and Manage Technical Debt
The first step in assembling furniture is to unbox all the pieces. We were doing this in a small room, so we began throwing all the boxes and foam packing into the hallway. When we finished, we discovered that we needed some tools outside of the room. We poked our heads into the hallway and realized that we had boxed ourselves in with all the boxes and trash. We had to spend several minutes sorting through the rubble in our hallway to be able to get downstairs. It also took several weeks to get all the trash out of our house. Our recycling bin could only hold so much at one time. Luckily we had the space to store all the waste.
Lean architecture design focuses on reducing waste, improving cycle time, and increasing the value delivered to the customer. A little time spent up front to think about the best way to deliver a product can save a lot of time down the road. To quote a wise client, “We can save a few minutes of planning with several hours of development.” Don’t rush into a project without taking the time to understand your use case and map out your plan of attack or you might find yourself in the middle of a giant mess.
Lesson 3: Limit Work in Progress
Now that I knew how I was planning to use the room (as a yoga studio), I knew I needed a way to watch yoga videos. We purchased a TV for the new workout room, meaning there were two tasks standing in our way of having a functional workout space: assembling furniture and connecting a TV to our Google Home network.
We started the process with my husband setting up the TV while I unboxed all the pieces for the bed. This meant we were constantly getting in each other’s way and unable to discuss the best approach to each other’s task. I didn’t like the settings he chose for the TV. He didn’t know where I put any of the pieces that I unboxed. If we had both worked on the bed, there were many tasks that could have been shared or completed in parallel. We would have been more in sync about what was happening if we were both unboxing. One of us could have been reading the instructions to better sort the pieces as they were unboxed and we would have delivered the completed bed much faster.
It is tempting to start multiple projects at once. Working on multiple things in parallel does not make either get delivered faster and often causes development to slow down from the context switching. If you have two, 6 month long projects, would you rather have one of them in 6 months and the other at the end of the year or wait until the end of the year (or longer) to get both? Even within teams that are focusing on one priority, there is a temptation to take on multiple tasks at once or to have each teammate own a story. It is physically impossible to do two things at once, so no one should ever be working on more than one task. Consider strategies like paired programming where multiple developers collaborate on one user story. By having two people work on one story, you improve quality as well as minimize business risk. When two people are familiar with the decisions and trade-offs made on a story, the code is easier to maintain.
Lesson 4: Communication is Essential
There were multiple points in the process of assembling the bed where communication broke down. My husband had opened the package of screws and noticed there were 5 types of screws. When I sorted the screws, I combined two similar looking types together. We ended up using the wrong screws in several parts of the bed. Had I stopped to clarify how many screws I should be seeing, the quality of our finished product would have been higher.
We also learned the importance of using a common language and communicating clearly. Comments like “hand me that” or “move it toward the wall” weren’t clear. I found myself frequently asking “What do you want me to hand you?” and “Which wall? There are 4!” We had to pause and have a conversation about how to give each other better directions.
Teams often jump into projects without taking the time to do team forming exercises like building a charter. Taking a couple hours to talk about your working styles and communication preferences (especially how you like to receive feedback) can make a big difference on the success of the project. Make sure everyone on the team is clear about the project goals and understands what is expected of them. Holding regular team building sessions can also be beneficial to improve communication throughout the team.
Don’t forget to include your stakeholders when thinking about communication. Our household is home to three cats who were not prepared for the transition we were making. At one point our kitten panicked and darted through the trash filled hallway. Make sure everyone impacted by your change is aware of the impact to them. Give them a chance to ask questions and make any preparations needed.
Lesson 5: Avoid the Sunk Cost Bias
After the bed was assembled and the TV connected, I was finally able to start using the room for my daily yoga session! The room is just big enough to hold our workout equipment with enough space to stretch out my yoga mat. When I am in there, my husband doesn’t have room to use any of the weights or other workout equipment. We quickly realized that my office across the hall (which is about twice the size) would make a better workout room. We now need to haul all of the workout equipment and a very heavy murphy bed into a new room, so we can use the workout space at the same time.
It is important to identify a minimal viable product. What is the smallest piece of the project that would still deliver value? Complete that portion, get feedback from the end user, make adjustments, and then move onto the next slice of the project.
I had used the guest bedroom to work out a few times before we assembled the murphy bed but never with the intention of having someone else join me. Make sure you are thinking through how the product will actually be used. Keep your mind open to other options if something isn’t working. Avoid the sunk cost bias which leads you to continuing down a path you have invested in even once the cost outweighs the benefits. If I had kept an open mind early on and committed to testing my idea for working out at home iteratively, I would have saved my family a lot of work.
Whether you are assembling furniture or building enterprise software, applying better delivery practices can save both time and money. Effectively managing delivery leads to better prioritization, reduces risk, and maximizes value. Consider adopting these tips or working with one of Source Allies’ experienced portfolio managers to assess your delivery process for improvement opportunities.