“Programmers are smarter than sprinters, we just fire off the gun every 100 yards.” – Rich Hickey, Simple Made Easy
It’s important to know when you’re sprinting, and when you’re marathoning. Agile practice uses a term like “sprint” to mean what really is an iteration. Sprint and iteration might mean the same thing to you, but they really should be separated.
When you’re sprinting, you’re pushing your limits to the max in a short period of time. Sprinting means optimizing for high speed in a small time window. A sprint is a large burst of energy that’s expended quickly. Contrast that with a marathon, where the race is about cadence and rhythm, consistency and continuity. If you watch a sprinter race, and then watch a marathoner race, you’ll observe entirely different spectacles. They’re entirely different races.
When I ran cross country in high school, one of the most important skills to master was consistent cadence. My coach would place people along the race course at certain mile markers to call out our times. The goal was to have each leg of the race be consistent with every other leg. If you were running a 6 minute mile in the first leg, you wanted to be as consistent as possible through each leg, with the possibility of shaving a few seconds on each one.
That was a fixed distance race, where I knew I had to run just 3 miles and then I was done. I knew that even if I went really hard for 3 miles, I wouldn’t collapse if I ran too fast. I could plan my target speeds ahead of time.
The racing distance of most software projects often ends up being longer than a marathon. What’s worse, most software projects don’t have a fixed distance that everyone has to race. Keep going until we win. When do we win?
Most software projects aren’t aware of this dilemma. You have a race that could go on for years, but it’s anybody’s guess as to how long it will actually be. How do you pace your race? How do you decide how fast to go? Is there a time to run like crazy and a time to slow down and recover?
Imagine a long distance runner entering a race. It’s a unique race, in that when you decide to enter, you don’t know how far you have to run. 100 meters? 5K? 10K? Marathon? All the runner can do is try to look at their surroundings, look ahead on the course and try to estimate based on what the course looks like. Does it veer onto the road and snake off into the distance, or does it loop around a small and confined area? When the gun goes off, is the runner going to sprint as fast as he can? No, he’s going to run at a pace he know he can sustain for a long time. After all, he might be running for another 50 miles. Sprinting for 50 miles is not going to work. This is the same ambiguity that surrounds most software projects.
If you know your software project is only going to be around for a few months, by all means sprint as fast as you can. Pull late nights, code all day and crunch crunch crunch. Burn and churn baby. But as soon as you realize that you’re in this thing for the long haul, it’s time to start thinking less like a sprinter and more like a marathoner.
The more I think about it, the more I’m convinced that great ideas can’t exist unless you start working on them. Event ideas that are really good probably get passed by too quickly because they don’t seem great in the beginning. It’s difficult to judge an idea accurately when you’re so far away from it, before you’ve put any work in and explored its possibilities.
Most great ideas only become so through exploration. Google’s starting idea was simple: Make a powerful search engine. At the time Google was starting out, the idea seemed silly. There were other players in the search space who thought they already completely solved the search problem. Search had been done, that idea had set sail: too late Google. Search was just a good idea until Google came along and made it great. Larry and Sergey had to make it a great idea by exploring the space, even when others told them that search was a waste of their time.
This is why good ideas are about execution, not sitting around thinking about stuff. When you encounter a new vision, it’s rare to get it at the stage where it’s a great vision. Known great ideas are the ones that have already been executed on, like indoor plumbing and in-home electricity. The world only knows great ideas as such because they already exist. If you’re looking for validation of your new project or business, no one is going to give it to you; it’s going to take some work.
Starting with an overindulged idea usually leads to disappointment. When you spend too long dreaming up a new business or a new piece of software, you wind up overextending your vision too early. I’ve done this far too many times. You begin with a simple and humble thought, and instead of getting to work, you try to mature it too quickly in your head. New features materialize in your mind before you’ve even written a single line of code. You spend too much time thinking about the idea instead of starting to explore the space and working on it. More often then not, this leads you down the completely wrong path. You’ve tried to mature your idea in the wrong way. It’s like trying to learn to juggle from a book. Sure, you can pick up some good techniques, but to understand juggling, you have to do it.
Great ideas only become great by starting as simple good ideas. I bet you are sitting on lots of good ideas right now. They probably seem stupid, or done before, or old to you. Take the time to explore one of them. Find a way to deliver a small working prototype of it. You’ll find that when you commit to doing even a small bit of work, it helps you to see the next step towards making your good idea a great one.
If you want to know how much you have to suffer for your art, ask yourself how much of yourself you’re willing to give.
Buried deep inside all of us, is a natural desire to make good things. Creativity is something everyone wants a little bit more of. When I say creativity, I mean the actual task of creating something, the actual act of taking a piece of you and turning it into something worth sharing with the world.
Why are some people capable of creating great masterpieces of inspiring work and others are only capable of imitations? It has to do with your willingness to be bold and take risks. A little bit of your soul has to in every project you do. It’s painful to break off a piece of your soul and put it into something or someone else; dangerous work indeed. But this is the only way to make something great. This is the only way to make real connection with people who are sharing your art.
Honesty has to be at the center of all good art. We’ll know if you’re faking it. We’ll know if you’re just trying to make a buck or ride some quick wave to fame. There’s no longevity in work that’s created this way. When you’re lying to us, we see what your true motives are. We’re pretty good at figuring out who’s speaking to us honestly and who’s not. You might be able to get away with it for awhile, but sooner or later even the best liars get caught.
So you have to be honest, and you have to be truthful, with the audience and with yourself. Being honest with yourself is a hard thing to do. It takes courage to look inside your heart and be ok with what you see.
This is why certain art speaks to us. There’s delight in seeing an artist pour out their heart for what they love. To see great art means to see courage. It means to see something that took great pains to make. There was struggle. There was a need to see and understand something more about how the world works.
Most people are afraid of this struggle. They’re afraid that if they look too closely at themselves that they might not like what they see. Or worse yet, they’re afraid others might not like what they see of them. This is why we see suffering for art. Because to make great art means to understand who you truly are, what you’re truly about, and say it with no shame.
Exhausting? Yes. But worth it.