Talks

Rough to Fine: Programming Lessons from Woodworking

Rough to Fine: Programming Lessons from Woodworking

by Mark Simoneau

Rough to Fine: Programming Lessons from Woodworking, presented by Mark Simoneau at RailsConf 2017, draws parallels between woodworking and software development, emphasizing the craftsmanship inherent in both fields. The talk begins with Simoneau sharing his background as a remote developer and his burgeoning interest in woodworking, framing the craft as a valuable metaphor for development practices.

Key points discussed include:

- Safety in Craftsmanship: Emphasizing the importance of safety, both immediate and long-term, in woodworking. Simoneau relates this to developer health, urging investment in ergonomic tools and fostering good habits to mitigate risks such as RSI and vision problems.

- Repeatability in Processes: The use of repeatability to enhance speed and consistency is highlighted through the use of jigs and measurement strategies in woodworking. The analogy connects to software development practices like using generators in Rails to streamline project setups.

- Understanding and Improving Tools: Simoneau discusses the significance of knowing one’s tools and maintaining them, illustrating this with experiences from woodworking where fighting faulty equipment hindered progress. He encourages developers to regularly refine their development environments.

- Tackling Known Problems: The speaker stresses that addressing known issues is more productive than fearfully contemplating all potential problems. He shares a personal anecdote about facing fears of making mistakes while building a table, concluding that a known flaw is manageable, while uncertainties can paralyze progress.

- Project-Driven Learning: The necessity of having a specific project to encourage learning and expertise development is asserted. Simoneau illustrates this point by sharing his journey of building a table, which grounded his woodworking skills.

In conclusion, the presentation outlines several key takeaways for developers:

- Invest in safety tools and cultivate good habits to ensure long-term health.

- Search for ways to achieve repeatability in processes for greater efficiency.

- Focus on resolving known problems rather than worrying about potential issues.

- Maintain tools and systems to enhance work effectiveness.
- Finally, consider a project-based approach to learning new skills or technologies.

Simoneau's insights encourage a mindset that appreciates craftsmanship, whether in woodworking or software development, urging the audience to observe or participate in crafts that foster continuous improvement.

00:00:12.639 Thank you for coming. My name is Mark Simoneau.
00:00:15.280 I work remotely as a developer for Stitch Fix. In fact, over the last five years and at my last three companies, I've worked remotely from my closet in a suburban house near Austin, Texas.
00:00:20.039 I've calculated that during this time, I've saved approximately 152,000 hours of travel. To put that into perspective, that's nearly a full-time job for a year. It's a bit mind-blowing. During that time, I've spent time with my family, but I've also engaged in activities near and dear to many geeks' hearts; I've developed a myriad of hobbies.
00:00:38.480 I know geeks who are collectors, film buffs, and comic enthusiasts. I particularly enjoy music, board games, and similar interests. However, I believe there is a distinct classification of hobbies: crafts. A craft is different because it produces something that other people value. Initially, the people who might value it could just be your significant other or your mom, but as you progress, your ability to create things that others find valuable increases.
00:01:07.240 I contend that we, as developers in this room, are craftsmen. We take bits, bytes, requirements, and ideas, combining them with our knowledge and skills to make applications. Therefore, I believe we can learn a lot from other crafts. In case you couldn't tell from the title of this talk, the craft I have recently taken up and from which I would like to learn is woodworking.
00:01:40.720 To give you some background about myself, I've been mildly interested in woodworking for a long time. I did not realize until well into my 30s that my father and grandfather were amateur furniture makers for most of my life. Here's a picture of my father working on my grandfather's Shopsmith, which dates back to the 1950s. I was genuinely excited to learn that he had this resource available to me, but he lives a few hours away. Every time I felt inspired to learn woodworking, I couldn't just pop over to his house for guidance.
00:02:19.879 So, I sat on this interest for a few years until a friend with whom I play Dungeons and Dragons shared a post about the Geek Chic Sultan. This is the Cadillac of board game tables, and it's absolutely gorgeous—a perfect marriage of form and function. They recognize this as well; it's priced like a Cadillac too. According to their website, it costs between $25,000 and $30,000, which is beyond my budget for a table. My kids need to eat and possibly go to college, so this is out of the cards for me.
00:02:47.360 However, they do offer other tables on their site, so I began looking around and got interested in the idea of having a board gaming table. I stumbled upon the Vanguard, which is a much simpler table and more affordable at around $3,000 or $4,000. It still has many of the expected features of a good gaming table; it resembles a dining room table, can have a top added, and even has grooves in the sides for cup holders.
00:03:02.840 When I looked at this table, I thought, this is pretty cool! Even so, spending $3,000 or $4,000 on a table is still a bit much. I would rather invest five or six thousand dollars on a workshop to build it myself—build versus buy, right? So, I purchased a bunch of tools and started collecting them; I built a few little projects to develop my skills. These were relatively simple pieces, and as I continued to practice my skills, it became time to search for some plans to build a gaming table or devise my own solutions.
00:04:34.120 I visited woodwhisperer.com and obtained plans for a table. It turns out that building a table is quite straightforward. Despite the complexity of some assembly, it fundamentally consists of legs, aprons that connect the legs, and a tabletop. In this particular project, the tabletop is somewhat intricate, but essentially it's still just a top. I want to guide you through the steps I took to build this table and highlight some surprising lessons I learned through the process that could be beneficial for all of us as developers.
00:05:05.520 Before diving in, I want to emphasize the importance of safety. I highlight it first because, if you remember nothing else, this is invaluable advice. In my experience of watching several hundred hours of woodworking videos on YouTube, almost all mention safety at some point, either directly or indirectly. They touch upon two different aspects of safety: immediate safety and long-term safety.
00:05:35.360 Immediate safety is about protecting yourself from harm—don't be foolish! Avoid having a piece of wood hurled through your abdomen and ensure you protect your eyes while working. It's been said that you can lose a hand and walk with a wooden leg, but you can't see with a wooden eye. So, eye protection is crucial. Long-term safety, however, involves investing in protection for your hearing and in dust collection systems. The harmful dust generated in woodworking can be insidious; it ranges from half a micron to two and a half microns in size, meaning it can pass through your lungs’ natural filters and is a known carcinogen.
00:06:16.679 Dust you can see is manageable. It's the dust you can't see that presents the real hazard. Investing in adequate dust collection equipment is essential. A person may spend a few thousand dollars to set up a proper dust collection system, which requires significant effort to professionally install piping next to each tool in their workshop. As a positive result, this setup provides cleaner air in their workspace than in their own home.
00:06:54.840 All of these categories are ones where you need to invest both money and time to form good habits. I find it easy to remember the necessity of keeping my hands away from a spinning blade—it's much more challenging to remember to wear a mask for dust protection. Consistency in developing safety habits is crucial for my long-term health and productivity.
00:07:22.759 The first lesson that I want to stress is that it truly pays to invest in your safety and to develop strong habits. I mean this in a straightforward manner. Issues like RSI, lower back pain, vision problems, and even depression are real concerns that can come as consequences of our profession. Therefore, it is worthwhile to be proactive in spending money on ergonomic tools, like a high-quality keyboard, even if your company may not cover it. For instance, Stitch Fix does cover that if you’re interested.
00:08:02.720 It’s also sensible to invest in a sturdy chair or a quality monitor—these are important for your long-term well-being. But adopting good habits, such as sitting correctly in that chair, taking regular breaks from the screen, and ensuring you visit your therapist or take your medication, are equally vital. These are the things we need to prioritize to ensure we can still be effective developers in the future.
00:08:27.440 Okay, now let's get started with building. The first task at hand is the legs. These legs consist of four identical pieces, each rotated differently. To ensure they are identical, you've probably heard the phrase 'measure twice, cut once.' However, woodworking typically dictates that this is not a sufficient method, especially when using power tools.
00:09:08.200 Rather than spending time measuring each piece individually, you can achieve greater accuracy through a process called repeatability. Each of the legs needs to be the same length, perfectly square, and have tapered edges. The first operation involves establishing the legs’ length. This is my miter saw; it cuts across the wood quickly and accurately. By using a stop block, I can measure once and make multiple cuts instead of measuring and cutting for each individual piece.
00:09:44.040 With the miter saw, I can secure the leg against the stop block, pull the saw down, and produce four pieces that are all identical within a thousandth of an inch. This swift process takes a matter of minutes. I then tackle the width of each leg using the fence on my table saw. The fence provides a consistent distance from the blade, allowing me to cut parallel edges. After cutting, I rotate the leg and cut again, transforming the piece into a perfect square. Once again, this only takes a few minutes.
00:10:35.200 Finally, I use a tapering jig to cut the tapered sections on the inside of each leg. A jig enables me to perform repeated operations more efficiently. This jig took just a few minutes to assemble. After making the cut, adding a piece on the end resulted in four identical legs. From this exercise, I learned that enhancing repeatability increases both speed and consistency in our work.
00:11:09.760 As developers, we naturally understand the value of repeatability. For example, using the command `rails new`, we can create a site much faster and with consistent architecture than if we built it from scratch. The deployment process is another situation where repeatability prevails; we execute a single command that allows us to deploy swiftly and effectively each time. However, we can extend this concept of repeatability to a smaller scale.
00:11:49.680 What if we construct a small jig the next time we need to address some data in production? For example, let's say we discovered some data that became out of sync and needed to wait a while to deploy a bug fix due to the nature of the bug. Instead of manually logging into the Rails console each time to fix it, we can develop a rake task to streamline that process and improve our efficiency.
00:12:22.960 With the legs complete, we can now move on to constructing the aprons. I traveled to my dad's shop and milled the lumber. The only remaining task was to create the grooves to insert cup holders. However, I found myself in somewhat of a bind, growing increasingly anxious about whether I could properly accomplish this task. The longer I contemplated the situation, the more my fears took over.
00:12:56.520 I began to worry unnecessarily, thinking I might make an unfixable error that would prevent me from completing the table. But I realized there really is no such thing as an unfixable error. If I made a mistake, I could always purchase a new piece of wood from the lumberyard. I worried that any flaw in the final product would be disastrous, yet in reality, all final products come with their own imperfections.
00:13:28.240 After much inner dialogue, I decided to just go for it. As I cut the groove into my first three pieces, everything went smoothly. However, on the fourth piece, I encountered a problem when the router made a screeching noise and split the wood. At that moment, all my earlier fears seemed irrelevant—the only issue at hand was the damaged piece. A deep breath later, I glued and clamped it, then sanded it down. The final product was a slight blemish that could hardly be noticed upon close inspection.
00:14:03.000 What I learned from this experience is that a known problem is preferable to the anxieties surrounding multiple potential issues. It's easy to become derailed by hypothetical concerns. When managing large production applications, deploying significant changes can seem daunting. However, addressing actual concerns enables faster, more efficient problem-solving.
00:14:35.960 It's alright to have some level of concern, but it is the fear that can lead to paralysis. After finishing the legs and aprons, it was time to focus on the tabletop. There are two key challenges to tackle: ensuring the top is flat and seamlessly joining the pieces together. Given that it will be highly visible, I need to ensure everything is tight and well-joined.
00:15:07.680 Since I hadn't milled the wood yet, I was working with rough lumber. My first course of action involved testing a small jointer I had purchased for my workshop. A jointer flattens wood by passing it over two beds with a spinning blade. It effectively removes any dips and curls. However, attempting to flatten a long board with a short jointer rendered ineffective due to the inability to manage the length of the lumber.
00:15:49.600 Next, I pondered whether a hand plane could work just as well. I know it’s possible to get a flat board from a hand plane, but the lack of size made it challenging to determine which areas were flat. Unfortunately, I struggled with sharpening and maintaining a sharp edge while using the plane. Faced with this dilemma, I found myself needing to assess the flatness of my work.
00:16:20.560 Eventually, I opted to visit a nearby shop that had a properly calibrated $4,500 jointer. I was able to get my lumber flat efficiently. Many of you might expect my next slide to preach the importance of using the right tool for the job, but it's crucial to emphasize that there can be multiple right tools. With the hand plane, I was fighting against the equipment, leading to struggles. Alternatively, the well-tuned jointer did the job effectively.
00:17:09.080 What I learned from this scenario is that if you’re struggling against your tools, focus on improving them. It’s essential to minimize the friction between yourself and your tools to enable more productive work habits. Developers can relate to this, and many of us have had frustrating experiences with flaky tests in CI, slow command lines, or clunky interfaces.
00:17:48.640 When I returned home, I finally had all the aprons milled to perfection, and I was ready to join them together. I planned to make miter cuts at 45-degree angles, leading to a seamless joint for the tabletop. Unfortunately, my initial joint produced an unsightly gap, due to using a friend's older miter saw, which couldn't give me the precision needed.
00:18:27.200 I began brainstorming solutions; I could invest in a high-quality miter saw for roughly $400 to $600. However, I'd still have to spend time tuning it. Instead, I considered using a more affordable hand saw. I had a simple $15 handsaw from Amazon and clamped a scrap piece of wood at a perfect 90-degree angle to achieve a flawless 45-degree angle. After cutting, I used my plane to ensure it to a precise angle, and it resulted in a good joint.
00:19:12.080 In conclusion, knowing my tools and techniques significantly improved my effectiveness. In development, the same principle applies. When engaging with clients, it's vital to communicate the appropriate scope of solutions they need, rather than overwhelming them with unnecessary complexities. This mindset helps ensure you are addressing their needs effectively.
00:19:58.120 Understanding the tools at your disposal allows you to use them effectively. If you are not well-acquainted with your debugger or command line tools, you will not make full use of them when problem-solving and optimizing your workflow. Moreover, knowing how to leverage basic debugging techniques enhances your development capacity.
00:20:38.520 As I wrap up this session at the lumberyard, I leave with a sense of pride. I've transformed rough lumber into functional and aesthetically appealing furniture. I genuinely feel I’ve achieved the status of a woodworker—not just because I wanted to become one, but because I had a specific project and worked towards it.
00:20:57.680 Crafting keeps passion alive, as it channels motivation into learning. I encourage everyone to pursue a specific project relevant to your interests, whether it's a new technology, a process, or a fresh programming language. Being driven by a target will facilitate the learning journey.
00:21:36.440 To summarize the key takeaways: First, prioritize safety and invest in it. Develop robust habits and focus on repeatability in your work. Don't overthink potential problems; instead, identify known challenges and address them. Maintaining your tools and keeping them efficient will also make a significant difference in managing workflow.
00:22:12.680 Having specific projects can motivate you to learn new things effectively. Problem-solving is a skill you can cultivate in any craft. I hope this talk has inspired even a few of you to explore woodworking or adopt a craft that will contribute to your daily work life.
00:22:44.599 Thank you very much! You can follow me on Twitter @Mark, and I also work at Stitch Fix. We are currently hiring, and if you are interested in developing crafts while working remotely, we welcome bright, kind, and goal-oriented individuals. I'd love to connect with anyone interested in woodworking, board games, or programming after this session.