Software Development: A Woodworkers Perspective (Part 1)
Planning and Preparation
If you read my intro article, you’ll know I’ve been reading a lot of books about “Mastering your craft”. Along the way, I’ve found multiple cross-overs between what I aim to accomplish as a hobbyist and in my day-to-day as a software engineer. I decided to share these points as advice we hear over and over, this time as a woodworker rehashing the process it took to make a small box. If anything, maybe I’ll finally learn to apply these same principles I keep reading about. Maybe…
Take the time, you’ll thank yourself later.
Planning and Preparation
It goes without saying, the best thing you can do before starting any project is to think it through. Take the request and whiteboard, napkin sketch, whatever it takes to think about the end goal. It doesn’t have to be pretty, just make the effort. Walk away, come back later, and do it all again. You’ll see something new every time, typically with the inner voice of “What was I thinking?” It’s easy to fall into the traps built by your own ego and confidence. Something along the lines of “This shouldn’t be that hard…” or “I can figure this part out as I go…” If you find yourself making these comments, do yourself a favor and stop. While you may be okay, it’s only a matter of time before errors occur. This is a game of “when will I screw up” not “will I”. Make a mental note and grab some coffee. Take the time, you’ll thank yourself later.
Preparation doesn’t have to be pretty…
You’ve thought about the project and made as many mental notes as your brain will allow. You’re ready to get started. Only now you realize your tools are dull, beaten, and I swear that ruler was just laying here… Take the time to find and organize what you’ll need. You may find you don’t have the tools necessary to complete the job. At this point, you’ll either make a new plan or find the resources. Finally, make sure your tools are sharp, tuned, and ready. “Take care of your tools and they’ll take care of you.”
To stay productive, you need to stay organized… or so I’m told. You try to keep the shop clean knowing if everything is in arms reach work can be done. Knowing you’ve done all you can, you approach the workbench with an attitude of just getting stuff done. It’s about this time my brain starts to think about anything and everything else. My mind is loud. Regardless of what I do. It takes a fair amount of time to focus and for that reason, it’s always best to take a minute and settle into the task at hand. A warm up. Start with something small. Layout the tools you’ll need, review your notes, get re-acquainted with the work. It’s not going anywhere. Getting prepared for a project has nothing to do with it. Sometimes, you may need to step away and take care of the distractions and other to-do items that keep popping into play. If all else fails, find a place to escape.
Keep your ego in check. If possible start with something unrelated to the project. Make a few test cuts, and get in the mindset. Make sure you’re focused.
It all seems simple enough, but after your first couple of projects you’ll hit a point where you say to yourself “I’ve done this before”. I’ve made this same cut 1000 times over. Why is this one any different? Reaching for the saw, you start cutting into what will be the finished piece, without thought. You feel good about yourself. Accomplished even. Progress is being made and you are proud of it. Then it hits you… something’s wrong. When cutting joinery, it’s typically something stupidly preventable like cutting on the wrong side of a line or just cutting the side altogether. At this point, words are said and you’re back to square one. Literally — You’re back in the car, driving to the store to pick up new material and eating the cost. The whole time knowing it was preventable if you had just taken a second to layout the project. Keep your ego in check. If possible start with something unrelated to the project. Make a few test cuts, and get in the mindset. Make sure you’re focused.
Left: Start with something unrelated Middle: Mark it out. What stays? What goes? Right: Mistakes happen
If you’re like me and have already screwed up just getting to this point, it’s okay. Remember all the previous mistakes, don’t repeat them. Instead take the notes, the material, a pencil, and get everything marked out. Identify the major pieces of the puzzle, how they interact, and plan ahead. Instead of cutting blindly, take a minute to mark the cuts, what should stay, and what get’s removed. This is the point where the napkin sketch starts to take shape and any unknown obstacles can be spotted before you’re in over your head… or back at the store. You know the end goal. Make sure it’s possible. Mistakes can still be made at this stage, but they can be saved or brought back to planning. You should end with a solid idea of how everything will interact and work.
With all of this you’re ready for step two — Use your resources and start building.
As a Developer, you need to take the time to plan a project and to prepare for the task at hand. I try to start all my projects the same.
- Think it through (describe the end goal)
- Warm up (review the project)
- Simplify your environment (remove distractions)
- Work on the broad strokes (mock, pseudo code)
Your mind needs to be ready and engaged. Warm up, review the project, maybe remember how to open and close vim. Tackle those side tasks that may annoy you later and get rid of any small task that may distract you along the way. Have a feel for all the major pieces of the project, where they belong, and how they interact. Take the time to understand how it all fits together. Project requests will change over time, but the knowledge gained here will provide you with all you will need to adapt. Be kind to your future self.
“Do good work... ” — Rogowski