,

A Cinderella Story: Lessons from a Fishing Boat Applied to Software Development

A few years ago, I embarked on a project to restore a fishing boat that I had purchased for a few hundred dollars from a local online classifieds website. The boat, nearly 50 years old, had been sitting in a yard for over a decade. Its accompanying trailer was covered in rust, the electrical wires were sun-rotted, and the rollers were cracked and broken. The seats of the boat were rotted out, and there were some holes in the bottom.

Despite these challenges, I saw the boat’s potential. Over the course of a summer, I dedicated my spare time to a complete makeover of the project. The transformation was a source of immense pride for me.

The restoration began with stripping all the electronics from the trailer, followed by sanding it down using a grinder and sanding wheels. Removing the old paint was the most challenging part; the multitude of nooks and crannies required meticulous attention. While I used the grinder for larger areas, smaller, hard-to-reach spots necessitated a handheld sanding tool. Though time-consuming, watching the gradual transformation was incredibly rewarding.

After sanding, the next step was to apply a primer to the trailer. Given its frequent contact with water, this was a crucial step to ensure a solid top coat. The final stage of the trailer restoration involved installing brand new electronics, including running and tail lights, and replacing the rollers and bunks for the boat.

With the trailer completed, I turned my attention to the boat itself. The seats were removed and remade from plywood. Several holes in the bottom of the boat needed patching, and despite its aluminum body, there was some corrosion that had to be cleaned off. After cleaning the hull and patching the holes, I painted the exterior a striking red color to give it a fresh look. The final touches included cutting and painting new seats, installing a new bimini, as well as all the necessary electronics and the motor. I acquired a 9 hp trolling motor and mounted it on the stern.

Aside from the immense pleasure in the project as a whole, I took great pride in seeing something which had been left by the wayside being lovingly restore and brought back into action. My efforts even landed this little guy in a commercial!

How this relates to the Software Industry

I have come to appreciate the analogies this project has to what it is like building software. Sometimes as engineers we build new software in a greenfield environment. We get the opportunity to chose what technologies we will use, how to architect and build it, and how to best implement features.

On the other hand, we often inherit projects which were created long ago. Sometimes the technology is very outdated (i.e. like the rust on the trailer.) It can take great patience and vision to be able to look past something which has served its purpose well but is far beyond its prime. The reality is, even outdated and old systems have proven they serve a valuable purpose. Otherwise they would cease to exist! The challenge, is to bring it a newness of life. To make it not only more “sea worthy” but something which can last for many years to come.

Often, this process involves either dismantling much of the existing structure and replacing it entirely, or using the existing framework as a foundation upon which to build or replace specific components and subsystems. In this article, I want to focus specifically on the analogy of removing rust from the trailer, as it aptly illustrates the transformative aspect of this process with respect to software development.

Identifying and Removing the Old and Inefficient: Just as I identified and removed the rust from the trailer, in software development, refactoring involves identifying and modifying parts of the code that are outdated, inefficient, or problematic. This is essential for improving the code’s structure and readability without changing its external behavior.

Attention to Detail and Precision: Removing rust requires meticulous attention to detail, ensuring every bit is addressed to prevent future issues. Similarly, refactoring demands a precise approach, where developers must carefully alter the code to avoid introducing bugs while improving its structure.

Enhancing Longevity and Preparing for Future Development: The removal of rust from the trailer not only extends its longevity but also sets the stage for future enhancements, such as new paint and improvements. Similarly, in software, refactoring not only improves the code’s maintainability, making it simpler to update and understand, but also lays a cleaner, more organized foundation. This facilitates easier implementation of new features and changes, ensuring the codebase remains robust and adaptable for future development needs

Labor-Intensive but Rewarding: Removing rust can be a labor-intensive process, but it’s rewarding when you see the restored trailer. Refactoring can also be time-consuming and requires effort, but the result is a more efficient, clean, and reliable codebase.

Summary

Restoring an old fishing boat mirrors the practice of refactoring in software development, where both processes involve meticulously removing outdated or inefficient elements to enhance longevity and prepare for future improvements. This analogy highlights the shared importance of detailed, labor-intensive work in ensuring the long-term functionality and reliability of things.

Just like the pride I have felt seeing that restored boat ready for the water and even starring in a commercial, there’s a similar sense of accomplishment in software I have built when my refactored and improved code is running smoothly in a successful application!