David Gurley is a graduate of the g77 cohort of the Galvanize Web Development Immersive in Denver, Colorado.
In 1958, a twelve-year-old set out to earn his Boy Scout merit badge for photography. His father’s still camera was broken, so the boy asked if he could use his dad’s 8mm movie camera instead. Having a passion for storytelling, this young lad didn’t just want to film some squirrels running around with nuts and call it a day. Instead, he pulled together what resources and creativity he had and made a western film called The Last Gunfight. That was Steven Spielberg’s first movie. He went on to make 17 more films by the age of sixteen; one of which would inspire Close Encounters of the Third Kind.
As developers, we all have aspirations to create something great: an app that will change the world, help millions, or push design into the next decade. But that will not and cannot happen without the ability to get something finished. The biggest reason I have not made the New York Times Best Seller list is because I never got past page ten on any of my “novels.” The second biggest reason is that they all would have been crap, but we will never know. More importantly, I never set myself up properly to finish a single one. I was doomed from the start. The same is true of your coding projects. Spielberg would never have gotten to the point of making blockbuster studio movies if he first didn’t have the skill to start and finish something with whatever scope and resources he was working with at the time.
Write Down Your Goals
The number one, uno, primo, first, absolute, critical, most important step in any of your projects is planning. Before your grubby little fingers even come close to writing a line of code, pop open a separate document and write down your goals. Writing them down helps organize the mind and often you will come to realize something about your original idea that might not have worked.
Every Galvanize cohort ends with a capstone project. For ours, we were given 10 days to create a brand new app from scratch while incorporating a brand new technology unfamiliar to us. If that sounds daunting, it is supposed to. This capstone is designed to test the coders ability to plan and finish a difficult project with a tight time frame. Students of cohorts-past and many future students are destined for disappointment right from the start. Many dive headfirst into their code and ultimately end up with unfinished apps. Once checked off, the goals you write down should be everything you need for an MVP (Minimum Viable Product).
Keep Your Scope Front-of-Mind
That leads us to scope. Listen – I know this is going to be hard to hear – but, whatever idea you are thinking about working on, you should probably pull back 15%-20%. Something often forgotten is that your code lives on. After you finish, nothing says you cannot later expand. Too many talented coders lose their way coming up with new ideas and big dreams on the fly, and sacrifice a viable working idea for something that felt big but had no pay off. We call this “feature creep.” Too many, “wouldn’t it be cool if’s.” Always refer back to your written down goals and ground yourself when things feel like they are getting too big. The difference between a meticulously planned out project that sticks to the original idea without getting out of control is the difference between The Lord Of the Rings films and The Hobbit films. Sorry Peter Jackson, you lost sight of your scope, and The Hobbit sucks.
During your planning phase, get out a whiteboard or your favorite wireframing software and go through every single action your user will take. Organize the code in your mind. Like writing down your goals, this will give you a good idea at the scope of work that is going to go into each feature. Apps can be complicated – especially if you are working with newer or unfamiliar technology. Features you thought would be a breeze can turn out to be nightmares. When working on my capstone, I was using a local data storage technology that I thought would take a day, at most, to implement. I wrestled with it for maybe six days. Luckily, I had planned well and incorporated “uh oh” time into my schedule, so everything worked out.
Plan for Panic
This is the moment when the world crashes in on you. It is 2AM, you can see nothing but error messages, and your app is crap. This will happen. This will happen on every project, forever, get used to it. The trick is to have planned for it. Close your eyes, take it in, breathe for a couple of seconds and follow the advice of a certain LOST doctor. Let the fear in, let it take over, let it do its thing, but only for five seconds, that’s all you give it. Then you get back to work.
The trick is to understand that the feelings are normal, but you have a plan. You have given yourself time and you know how to problem solve. If you need to, walk away. Take a break. Read a book, listen to some music, put on your favorite TV show. Ninety-nine percent of the time this works better than banging your head against the code.
I know I talked a lot about limiting scope and keeping things manageable but that doesn’t mean you cannot stretch yourself. Find a way in each project flex your skills and grow yourself as a coder. Being able to finish the project will make this exercise that much more meaningful. I can look back at each launched app or website I have made and see myself getting better. It feels like leveling up.
Stretch, But in a Different Way
Remember back when we were writing down our goals, whiteboarding our app, limiting scope (but still stretching our skills) and throwing away all those super cool ideas that felt a little too big? Well, don’t actually throw them away. Keep a separate list for stretch goals. Engage your big-thinking side and hold on to every pie in the sky idea you come up with during development. You have to exercise some self control to keep from going wild on this list until your main goals are completed, but, once you have, move on to that stretch goals list and go nuts. The trick is to make sure you save your original completed version and DO NOT TOUCH IT. Work on your stretch goals in a different version or a copy. This is your time to dream big and explore, but you don’t want to sacrifice being able to launch your original completed app if the new features do not get fully completed in time.
Smile and Be Proud
Launch your project and pat yourself on the back. You did it. I’m proud of you.
No, really. If you complete something that hit all of your original goals, that is something to be enormously proud of. Make sure to take a moment and bask in your glory. Look back at all of your hard work and smile.
The last step after you finish circles back to the beginning again. The best way to prepare for your next project happens here, at the end of your current project. Like when you wrote down your goals at the beginning, take some time to write down what lessons you learned and how you will make your next project even better. Open this up and give it a quick read before jotting down the goals on your next project. Rinse and repeat.