"Self Operating Napkin" - Rube Goldberg
Recently, one of my clients came to me with a complicated new project, explaining, “I’ve seen you take weird stuff and make it work.” It made me laugh, but my first thought was “that’s not really how I want to be thought of!”
His words stuck with me though, and as I thought about it, I started to think that it was a pretty accurate summation of what I enjoy about building software.
The initial connotation I drew from the comment was that of a “hacker” just slinging code around and getting things to work, but ultimately ending up with a complex mess. This approach is the antithesis of how I think about software. Prototyping and experimentation are important, but when we skip the critical step of reflection and refinement, small oversights and issues tend to snowball into large problems that frustrate users and inhibit further development.
That said, building software is taking weird stuff and making it work. There are so many constraints to navigate when designing a solution: the rules and conventions of the business domain you are working in, organizational structure and dynamics, legacy systems and infrastructure, your team’s skillset and the needs of the system…Many of these constraints are not evident at the beginning of a project and can only be discovered, or at least fully understood, during development. The exciting part of all this for me is identifying the important components and patterns and fitting the pieces together in a clean and elegant way that can make sense to end users and stakeholders, as well as other developers. When someone can look at your solution, whether through the UI or at the code level, and say “Oh, I get it,” that is a great feeling!
Here are some of the things I’ve enjoyed helping clients with recently: