Lessons from Carpentry in Web Development

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.

In web development, this equates to knowing the content first. What the content is, and where it goes, affects how you write the markup for the layout. Knowing the markup affects the CSS and the JavaScript. And knowing how things are content managed will affect how I separate and connect features across all three.

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.

A blogging platform is not a content management system, no matter what anyone says. A JavaScript library might really only work great as a single page application; it may not be a useful MVC tool. A tool that’s advertised as being a media management tool might really only do well for videos.

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.


  1. //

    Nice analogies, Frank. Any painful lessons to add? In woodworking in high school and with the amateur carpentry my father’s shown me, safety and technique were stressed though I’ve still made some scary mistakes. What’s digital the equivalent of knocking out a knot with a mitre saw and/or forgetting your safety glasses? :-)

    Oh and one more thing I’ve learned as that for existing projects, the “true value” warning applies. Real world walls and boards are not really straight and 90 angles aren’t always 90. In digital projects, the build may not match the design. Even more complicated is you’ll likely have several builds and several designs.

    So that media management platform that looks like one way today, might be something different tomorrow… hopefully that much better as well. ;-)

  2. //

    When I worked on the trim with these shelving units, I checked which side of the board had knots, and I made sure to run the side with the least amount of them through the table router.

    Just as a board simply has a knot in the wood, Angular.js and Tridion’s Experience Manager do all of their magic client-side; not inherently a bad thing. But, try to work with both of them at the same and you could run into all kinds of problems.

    So, I suppose the lesson there is, “know when a unique feature has a dangerous consequence.”

    And yeah.. that true value lesson applies over and over again. When someone asks for a shelving unit that’s 18 inches wide… it’s the unit that’s 18 inches wide. not the interior. Requirements are a fickle thing.

  3. //

    Good article with interesting examples.

Comments are closed.