I come from a family of builders. My father’s father was a master carpenter. And though my father was a business man by career, he was an excellent carpenter by trade. My grandfather built a dresser for my father that I still use today. I have boxes that my father built, a pump organ that he restored, as well as desks and benches. My mother has a hutch that her grandfather build and my father restored. We have furniture, and the tools used to build it, that go back five generations.
Unfortunately, my grandfather died before I was born, and my father died when I was twelve. I missed out on the chance to acquire much of the wisdom that’s accumulated over the years. Now, as a man in my 30’s, I’m learning how to build things with trial and a lot more error than I’d like. And I’ve learned a lot of lessons in carpentry that have parallels in web development.
You can’t make a board longer
Intellectualize this all you want. Until you’ve spent any amount of time cutting boards, you won’t really get what I’m saying. You can pull out wayward nails, re-drill in a new spot, even sand off some rough cuts. You can fix a lot of mistakes in carpentry, but you can’t make a board longer.
In the digital world of Ctrl + z and version control systems, we deceive ourselves into thinking that anything can be undone; mistakes aren’t permanent. But, the “board” is time. You can’t make a web project consume less time. Recently on a project, I had an issue pop up. I used ctrl + z to undo my mistakes. I even did checkouts of earlier commits. And sure, I did “undo” the mistake, but that doesn’t mean that it never happened. I lost time undoing what I’d done, and that affected the deadline.
The time between now and the deadline won’t get longer because you undid your mistake
Design with Details
I’m currently building a storage system for our walk-in closet. Sure, I could just whip up a rough sketch of how I want it to look. But that doesn’t tell me how much lumber I need to buy. And without knowing how much lumber, I don’t know the cost; this might be a lot more expensive than buying a prebuilt system.So I need details for estimating the cost and for knowing the materials that I’ll need.
And it’s not all measurements, either. I have to work out a seemingly simple thing, like how I’m going to do my joints (connect my boards). If I connect two boards with a simple butt joint (two boards up against each other), then the thickness of one board needs to be accounted for by subtracting from the length of the other. My decision on the type of joint affects the length of the boards.
The position of the screws affects how I can attach other boards. But before I get into that, I need to know what is going on these shelves, because that affects the type of board, the thickness, the method for attaching shelves, and the size of the screws.
Before you make something, you need to know what you’re making it for
Know how your tools affect your project
In one of the more fascinating challenges of carpentry, you have to account for the thickness of the blade. If I cut a 6-foot board into 6 boards with my mitre saw, the last board will be about 5/16 shorter than the previous five, because my blade is 1/16th thick. My tool has an impact on the project.
In web development, I have to measure the impact that setting up Sass, Gulp, Grunt, Jade, and whatever else will have on my timeline. Setting up a new project, even if I use Yeoman or Bower, still eats away at my deadline. Not only that, Sass, Gulp, Grunt, or Jade have their own errors that they could throw, in addition to errors and bugs I could have in the UI I’m developing. Those errors will eat at my deadline, too.
Every tool has an impact on your project
More Material can Create More Waste
Here’s a real example of how this works: I’m trying to build three shelving units that are 6-feet tall a piece. To do so, I need six 6-foot boards. Needing six 6-foot boards is not the same as needing 36 feet of lumber. If I go to a lumber yard that only has 8-foot boards, I can’t finish the project with five of them. And if I buy six 8-foot boards, I’ll have wasted 12 feet of wood.
This isn’t the same as that old project management saying, “9 women can’t have a baby in a month.” This is that saying, “six 6-foot boards aren’t the same as 36 feet of lumber”. The requirement is the requirement. Delivering more than what the requirement says doesn’t do anyone any favors, it just wastes time.
Don’t Try to Make Your Waste Beneficial
If I needed three shelving units that were six feet tall, and the lumber yard only had 8-foot boards, then maybe it’s not a total loss. If I’m using the same wood for the shelves, I can use the left-over wood (which is called waste) from those six cuts as shelves. But, — because my tools have an impact, I can’t cut a 24-inch board into two 12-inch boards. So, if the width of these shelves is less than half of the width of the waste, then I could use the boards for the top and bottom.
So if my shelving units are supposed to be 11.5 inches wide, then my waste has benefited me. But if my units are supposed to be 12 inches wide, then I only benefited from half the waste — I’ll still have left-over wood and I’ll still need to buy more.
If delivering one requirement can help you deliver another, that’s fine. But don’t spend time focusing on the waste.
Know the True Value of your Materials and Tools
This is one of the most baffling aspects of carpentry: a 2 x 4 isn’t actually 2 inches by 4 inches. It’s more like 1.5 x 3.5. Lumber mills cut trees into lumber very shortly after they’re felled. When they made the cut, it was 2 inches by 4 inches. The wood has since shrunk into the 1.5 x 3.5 boards that you’re now using. One-inch-thick boards are actually closer to 3/4 of an inch. And, I recently learned, if you purchase a router bit that’s 3/4 inch, because you’re expecting 1-inch boards to actually be 3/4 inches, you’ve still made a bad assumption.
You need to work against the real impact of your materials, not the advertised one
Know What to Do with your line
This was one of the first major hurdles I had to get through in carpentry: Do I cut the inside, outside, or on the line? When I measure the board, mark the line, and draw it with a straight edge, where do I cut?
The first few projects I did came out pretty awful because I didn’t know where to make my cuts. The result was that no two “12 inch” boards were really 12 inches. So, I did some reading and found that most carpenters recommend that you leave the line. So that’s what I did, I’d draw the line, and then cut on the outside of it — just enough that I could leave just a little bit of the line left.
Why leave the line? Because the line is the actual marker of distance. I drew it at 16 inches; if I cut off the line, my board isn’t 16 inches long any more.
In web development, this is standard-setting. Decide if you’re writing HTML5 or XHTML4.1. Decide if you’re following CSS2.1 or CSS3. Decide if you’ll use a methodology or technique, like BEM or OOCSS. Decide how you’re going to establish, “this is good, that is not”, and then decide how you’ll identify whether it’s good or bad.
Set standards so that you can be consistent and identify success
Measure twice, cut once
Why do carpenters say, “measure twice, cut once” ? Because you can’t make a board longer.
Measure. Mark your point, draw the line. Close the tape measure. Then, open that tape measure again. Measure where you marked your line. Is it the same? If not, erase or draw a squiggle through the original line, and then measure and draw the line again. And then measure that line again. After you cut the board, measure it again.
Why so much measuring? Because a great way to screw up a table is to measure one leg 1/16 of an inch longer than the other three. Essentially, this is unit testing. I check the measurement of a table leg three, four, or even five times. I do this because, if I get it wrong, I have three other table legs to change.
In Web Development, we want to test as much as possible. We test a single feature numerous times before we merge it in to the main branch. What we don’t want is for a single feature that I work on to require three other team mates to go back and check their work for impact. I test my work, and I even test my tests to make sure that what I’ve done works with the entire code base, and doesn’t result in a project that wobbles.
Test Twice, merge once
Time is something you don’t get more of, so center your tasks around not wasting it. Understand that more details are always better than fewer. Know that every tool you use has an impact on the project, and be prepared for it. Focus on delivering requirements. If you can deliver a requirement that can benefit another requirement, that should be a bonus, not a focus. And know that there is an advertised and a true value of everything you work with. Develop consistency that is valuable — and more importantly — testable. Spend time testing everything, even your measurements.
If you’re a developer, I’d encourage you to develop some kind of construction skills, be it carpentry, masonry, plumbing, welding, or heck, even legos. When you build something in the analog world, it can teach you a lot about how to build in the digital world, and how to plan for your next project.