While reading “The Passionate Programmer” by Chad Fowler, there were two back to back chapters which really inspired me a lot. One is “Be a generalist” and other, “Be a specialist”. It looks ironical, yet it’s some seriously good advice when it comes to practical life as a software developer.
I’ll start with the first tip which is to become a generalist. Here generalist is similar to jack of all trades. This might be contrary to what many other think but please give me time to justify till the end of this post. So to become a generalist means to become an all rounder, a pinch hitter or a go to man for everything. Fowler has given an excellent analogy of manufacturing process, where everyone works in a “clean and compartmentalised” way but software is actually soft and flexible. So it’s not meant to be manufactured. I’ve had experience of working in a corporate as well as in a more development friendly environment. I’ve seen this process, and I know there are plenty of places where we are not doing it the right way. In India working in a proper corporate, I’ve seen developers hired for a particular task or technology, or a specified set of rules. We’ve made compartments on the various functions various people perform. We have just-java-developer or just-tester or just-data-analyst and often there are blame games between all of them.
In the last corporate organisation I was working in, we made java agents on a selenium based API which was developed and maintained by platform team. As developers, filing a platform bug was a very common practice. It was misused and on most of the occasions it was the developer who was not doing it the correct way and blaming it on the API. Majority of Platform bugs were invalidated and it was pathetic. When compartments are made so clear, blame games happen. I’ve experienced it, that it just causes useless delays and a loss to everyone. To close these boundaries, it’s the responsibility of developers to know stuff. Environment is fast changing, and pinch hitters are the requirement of the day anytime. A Just java Developer who coded a web application is awesome, but more awesome is the person who in case of site getting down would himself handle everything from SQL failure to the web server crash or the network routing. Similarly, a generalist is very quick on architectural decisions, bug fixes and everything else. In the more developer friendly organisations, we need these pinch hitters. When stakeholders demand something, saying no and pushing the dependency on some other specialist is not a feasibility. Addressing the concern right away, and understanding every aspect of a product is what we need from everyone and it’s a good practice towards a smarter IT development industry.
Enough said, the next chapter in Fowler’s book is named “Be a Specialist”. I counted that in this post only because, it’s the combination of both that makes the perfect sense. I made up your mind to be a jack of all trades but you have to remember that you have to make something entirely your expertise as well. Knowing everything is a key but from the core, if you are a Java developer, you have to know things from the JVM prospect as well. As Fowler wrote, we lack technical depth even in something we call ourselves expert in. Whether you write PHP or Node, you should know it thoroughly inside out. So as a Java developer who developed that website, and who is a specialist in Java should at least make sure that there are no performance issues at the first place.
I’ve seen pinch hitters who come up good in case of escalation with pretty much everything, but they don’t take the full responsibility of one thing completely. They are like floater in football, who can be placed in midfield or as an attacker or defender, but there’s nothing he can be relied upon with.
So overall, I sum up these two contrasting topics to make myself more clear. Don’t use the excuse of being a specialist in one thing as a reason to avoid solving problems in another one. In fact use it as an opportunity to become the superhero world is looking for. Doing so, however don’t lose your grip on the thing you’re perfect on. You should always be the best on what your specialisation is.