I just read Scott Porad’s post “Why do web sites and software take so long to build? And why is it so hard?”, and it really got me thinking. He talks about how clients and customers think software should be faster and cheaper. That’s human nature I think and we can’t isolate that to consumers of software. That’s true for consumers of everything. I would like my car to be cheaper and run better. Everyone would. So I hear that point, but I think the more interesting part of his post is about the handmade nature of our work.
I had never really thought of software as handmade, but of course it is. A human being pores over every line of code in a piece of software. Of course there is code that writes code, but the code that writes code was written (you follow?) by someone. The human element gives rise to a number of things which make software more than the sum of it’s parts.
Software developers each have their own style. They may be devotees to a certain movement or ideology, but each of us have carved out our own style.
- How and where do you write comments?
- How much detail do you include in your commit message?
- What language do you prefer to write software with?
- How do you organize your workflow?
Answers to all of these questions are just the tip of the iceberg that is your specific style. The style of the software developer often comes through in the end product. We all make assumptions about the end user. How you came to those assumptions (research, intuition, testing, etc.) is part of your style.
The ability for code to be beautiful has been widely discussed and debated. I won’t enter into that discussion at this point, because I don’t think it matters. Software most definitely can be beautiful. There are applications, and operating systems that are more beautiful than others. These points of beauty are crafted from the hands of the people writing the code. Choices are made to one thing rather than another. The result of those choices are what ends up on our screen (be it on your phone or computer).
A piece of software is rarely simple. Although the user experience of successful software is often simple. Distilling complex problems into simple solutions is a very difficult task. Think about the best teacher you ever had? Ten times out of ten, they were a good teacher because they could take something that you didn’t understand and simplify it to the point where you could understand little bits at a time, until you were finally able to understand the whole thing.
The idea that software is handmade is a good reminder that what we do is a craft and that we, as human beings, do have an impact on the things we create. It can very often feel like we are automatons churning out line after line of code, but to change our collective perspective to see that the product that we are creating is handmade and like anything else that is handmade, it bears the fingerprint of it’s maker. That is something I will be more mindful of now.