What Shoveling Snow Taught Me About Making Great Mobile Apps

image

How shoveling snow this winter helped me contemplate what makes great software

I live at the top of a steep and twisting driveway that quickly turns into what I’ve described to my team in Slack as “a snowy deathcoaster”. While spending a few hours trying to end my family’s snow-exile, my mind drifted to thoughts of how to build great software. 

Here’s what software has in common with shoveling snow: 

A delicate balance

It’s utterly impractical to try to remove all snow off of my driveway with a shovel. I saw a neighbor using a tractor and even that didn’t go very fast. On the other hand, it’s certainly going to be too dangerous to simply drive up or down it without any snow removed. Like Aristotle’s Nichomachean Ethics, the right path lies in between errors of excess or deficiency.

Software is always about finding the delicate balance between never shipping, and shipping half-baked, unstable code. Often great teams will have a little bit of each personality – what Rands calls “Stables and Volatiles“ – and hold them in a friendly tension.

As always, focusing on the customer and treating the product as central aids this balance. By knowing the customers need new features and our product is not yet good enough, we are motivated to constantly push out new releases. At the same time, customers need a stable product and we can’t push out things that negatively impact them.

Tools are essential

Joseph and I have a slide in our talk about software that simply has the equation: Outcome = (Time + Effort) X Tools

It’s a simple but extremely powerful concept. The right tools are multipliers that can vastly increase your ability to make things faster, better, and in a repeatable fashion. I’ve never been more thankful for a physical tool than when I was out shoveling snow. How I rejoiced that I didn’t buy a cheaper model!

Likewise, when it comes to software, you can’t skimp on tools. Make sure your teams have the best tools to work with and actively search out things that can make you better. If there’s a 3rd party service that can help you go faster, don’t hesitate to pay for it. If your team can spend some time automating a difficult process, you’ll immediately feel the benefit. In the long run, cost-cutting turns into wasted money when you realize how much productivity you sacrifice. But more importantly, choosing the right tools makes the people who work on software more motivated to do great things since they waste less time worrying about the more tedious things.

Ignore fun

When I was shoveling snow the bottom of my driveway was mostly clear and you could chip off these huge patches of ice with a satisfying toss of a ton of snow. It was hard to tear myself away from this fun task to work on other parts that were going to be more of a battle, but needed to be cleared.

In software, there’s always some tempting, fun aspect of a project. It’s a black hole of time, but you still feel so productive while you refactor it to ever cleaner states while ignoring the way more difficult and necessary parts of the product. It’s essential to exercise some discipline and make sure that the next task you pick up is actually the next most vital feature. It’s often a good idea to jump into a project or sprint with the idea of tackling the least “fun” aspect of it – after that’s down, everything else feels like it’s moving quicker and you don’t get lost in features that don’t really matter.

Iteration is power

It’s pretty daunting to stare down a driveway that’s iced over and full of snow. The only way to get started is to make a small patch of it less awful than it is now. But by working diligently, it slowly starts to fade away and clear up. This is the power of iteration: small incremental changes that have a huge cumulative impact.

Obviously, this is directly applicable to software. Iteration is the key to quickly and consistently delivering quality software. By keeping an eye on the big picture but focusing in on the next steps, things slowly start to take shape and approach the product you’re after. There’s few things more satisfying than when your team starts to see all these little efforts add together and make something exciting to share with the world.

#businessethics #businessphilosophy #developers #developertools #iteration