Long live the Software Artisan
I've spent a lot of time in my profession thinking about how I'd like to present myself as.
After many sessions I came up with the term: "Software Artisan". A term which I plan to explain now. Yet, in the way of the great Gustav Jacobi and his quote:
Invert always invert.
I'll apply the reverse way. First, defining why I don't see myself with the terms the industry states.
The problem with optimization
First we have the Software Engineer. Engineers are people who solves and optimizes a problem applying their technical knowledge.
With optimization I don't mean software performance, quality or other intrinsic characteristic. I mean the optimization of the job itself.
When you optimize a job it becomes more mechanic and you lose the pleasure of doing it. I create software not only as source of income but because I enjoy doing it. That's why I would still create software in my spare time if I had another job. And it's there where the term Software Engineer doesn't apply.
I associate Engineer title with a job post. Something that isn't remotely related with pleasure or enjoyment.
Do you need an architect?
Then we have Software Architect. This term is an specialization of the Software Engineer. It isn't used in the same way that it's used in the construction industry. There an Architect takes special consideration on the aesthetics of the design.
A Software Architect structures the technological services used in the system. How they relate, connect and interact with each other. For services I meant: Databases, caches, job queues, messaging, and other micro-services.
But this is a very narrow vision of the whole activity of creating software. Also I am convinced that Software Architecture can't be designed from Top-Down perspective. This always incurs in over optimization and over complicating the design.
The right way is to arrange it from Bottom-Up. Letting Architecture grow in an organic way. This encourage you to improve the things that needs to be improved. Yet also you don't waste effort on the things that don't need it.
To develop or not to develop?
Then the classic, the Software Developer.
The problem is that this term doesn't reflect anything related with the business. It doesn't take into account the activity of thinking solutions for the business.
As if the solution has been already thought by someone else and the person only needs to implement it. Some people do that and like doing that, but I don't.
I like thinking what is the problem we are trying to solve. What is the business and what does it need? Does it really need this? How can we solve it with Software?. And more important: Do we need a Software at all?
The bastard
Then I came to my mind the Software Designer. This term is not used in the industry so let me define it.
A Software Designer is a person who applies the Design Thinking process in a software medium. This iterative process involves thinking in problems and taking into consideration the stakeholders.
Yet, Software Designer would be misinterpreted. The industry used to differentiate between different stages in software development. A design step and implementation step.
There was a time when waterfall methodology was around every corner. There was a difference between designing the software and implementing it.
Of course that isn't truth. When you write code not only you are implementing software but also you are designing.
New problems that you didn't thought will come up. As this happen you take a new decision for it. Taking software devisions is designing.
Design is an iterative process that isn't disconnected from implementation. It was wrongly used in the past in the Software Industry. It didn't reflect its real meaning. That's why I wasn't comfortable with it.
What about the hacker?
We read it every time in job posts. "We need a highly skilled hacker for X". We tend to think about the hacker as a person who just solve a problem in a technological way.
Yet the term doesn't represent anything related with business. Hackers are pure technical. They don't think about if the problem they are solving is a problem which needs to be solved. Or if the problem might be another one.
Why not Software craft-person?
Things are getting clearer now. This term came many times to my mind. A craft-person is a very skilled professional in a particular craft.
But, craft-people don't think about new creations or develop new things. They only replicate the craft and often in an industrial way.
I don't like to replicate stuff even if that is very lucrative. (I'm looking at you WordPress developers!)
Here comes the sun
The Software Artisan rises. So now that I read all this, what do you mean by Software Artisan? Are people who not only are high skilled in a craft but applies their knowledge to make new art. They are somewhat between the Artist and the Craft-person.
They take relevant attention to aesthetics but also to make their craft functional. They always have its consumer in mind.
Would you rather have an artisanal cheese? Or the white paste that is being labeled as cheese at your local retailer?
Would you rather taste an artisanal wine made at winery that surpassed the test of time? Or a purple liquid bought at your near 24/7 ?
Would you rather have high quality software tailored for your business? Or a Frankenstein filled with plugins?
The artisan mind takes special attention in what the business needs. Yet, it doesn't leave aside that making software is a form of art.
Passion comes with emotions and that is the art ground. You cannot be a passionate developer without considering software as an art expression.
But as Aristotle said in Nicomachean Ethics:
Virtue lies in the middle between two vices, one of excess and another of deficiency.
The artisans brings to balance both sides. One as pure emotional and the other as pure rational.
In software the emotion lies in finding the perfect design. It lies in hours refactoring the code until you have nothing more to take. The rational thinking lies in making a living. In achieving estimations and completing projects.
I always try merge both mindsets that's how I want to define myself.