Highly experienced & passionate technologists have a challenging task in terms of figuring out their career strategies. For some this process of self discovery and adjustment works itself out quick, but for others its a harder journey. A passionate technologist often feels the need to be exposed to new cutting edge technologies and at the same time expects appropriate career growth and recognition.
In my mind there are at least four broad roles. First are the Generalists who like to know a little about everything and has a deeper expertise in at least one area (maybe in say java or .net and sprinkle in some Cloud tech maybe). Second is the Specialist, who has decided that he/she would rather focus on certain specific areas/products – say AWS/Azure/Google Cloud, Enterprise Architecture, BPM or Rules Engines. The third type are the Tech Managers who lean towards managing technology delivery (project or program). Finally the fourth type are the Laggards. These are people who for whatever reason are content working on dead-end products/projects and just hanging in there. I will not spend any time on Laggards; cause by choosing such career paths they have made (IMO) a bad choice and are on the axing block every time there is a reorg conversation.
A Generalist is someone who finds great joy in having all tools/methods available and not being forced into a corner with a narrow set of options. Someone who has been a Generalist for long will have a hard time becoming a Specialist. But every now and then a Generalist will specialize in a specific exciting area (say Hadoop) and then snap back to being a Generalist.
There are big rewards to be gained for Specialists if they (get lucky and) pick the right specializations. Also a focus on a particular space or industry makes them more valuable assuming there are not too many of their kind. That is why you cannot specialize in Java or C# cause there are way too many of them. Specializations come with risks, such as when your product dies a sudden (or slow) death and you are found lacking in other areas.
There are some exciting Specialization areas available nowadays in BI, Big Data or say just in the Hadoop space. Though even within that space make sure to keep a broad knowledge base, both from a products area as well as a thorough understanding of what business use cases they are applicable for. For example if you are a BI specialist I would suggest against specializing in only one product. Keep your exposure to at least a couple of products. On top of that, keep an eye on how emerging areas impact your space. Such as Hadoop/Big Data impact on BI OR how BI in the Cloud will work.
Being a career technologist can sometimes limit your growth opportunities. That leads many to make the transition over to Technical Management. For some this is a heart wrenching time. Staying on the cutting edge and being able to actually build something can become an addiction. In large firms these roles are quite distinct and its hard to keep your foot in all three. The only place you can play all three roles (yes all three) are at small start-ups and product companies where bureaucracy is seen as a curse, and agility is rewarded.
I consider myself as a Generalist with a focus on the Java & OpenSource. I have a keen interest in the Big Data space too. So given that lets take a look at what a Java Architect has to deal with nowadays (this is not all inclusive by any means). This should give the reader an idea what all it takes to be a Java Architect (IMO) and whether or not being a Generalist in the long run is something you want.
A programming language (such as Java, Scala, Ruby, JS) is a medium to express your thoughts and ideas from abstract state to a working model. Some languages provide more expressive power in a single line of code vs others. To stay on as a Java Architect its a given that you need to stay on top of language changes such as all the cool features coming in Java 8 for example.
Next you need to have an enterprise perspective. The size of your company does not matter. An Architect needs to always have a wider perspective than any one individual application. In one of my previous jobs I had a small consulting company, with some very talented developers, give me a list of frameworks and tools to use on one of our projects. It had probably 15+ new JS related frameworks and 15+ new Java frameworks on top of what they were already using which included- Spring, Tomcat, Hibernate, Spring Security, Spring MVC Restful, Oracle, Gemfire, Tibco , etc. From an architecture point of view this was complex enough with all the existing tools and would become even worse with the addition of 30+ new tools. Most of these hotshot consulting firms build the software and then move on to the next big thing. Who maintains what they leave behind? While this is a question you need to answer in the context of your firm, make sure it does not become an excuse for you to resist positive change.
As an Architect you have to be able to weed through these requests and align them with current needs and highlight any risks you see with introducing them into the environment. However much you may feel to jump in with them and build this awesome system you have to slow down and make some hard decisions. Again you do not have a crystal ball to look into the future and predict where your decisions will lead. Just make the best decision for now.
If you are a Java Architect your job is not just defined by your Java skills. One has to be on top of the entire ecosystem of products that make up a system. You have to stay current on existing areas such as JEE or Spring stack or some new stack that may be gaining traction. Most important is to cover the breadth of areas such as – UI, Backend Processing, Traditional Database, NoSQL, Caching, Search, Big Data, Document Management, Security, High volume/throughput messaging architectures, etc. Lets see what some of these can blow up into…
- UI: Traditional backend MVC frameworks such as Struts or Spring MVC, Single Page UI models, Web Browser vs mobile. Knowledge of key JS frameworks out there such as Sencha ExtJS, Dojo, AngularJS, Twitter Bootstrap, JQuery, etc. etc.
- Backend: RESTful backbone frameworks such as Spring MVC RESTful, Jersey, CXF, SparkJava, ExpressJS, NodeJS, Asynch brokers such as ActiveMQ, etc.
- Database: Traditional RDBMS
- NoSQL: Document based (mongoDB, couchDB), Graph (Neo4j), etc.
- Search: ElasticSearch, Solr, Lucene.
- Messaging architectures: ActiveMQ type of JMS brokers, Kafka, Kerstel and related Integration patterns. Supporting frameworks such as Camel or Spring Integration.
- Big Data: Hadoop, Storm, Spark, etc.
- Others….SOA, Security products, API Management, so on so forth.
- Oh and must I mention Cloud.
An Architect worth his/her title needs to stay on top of these areas. You cannot be an expert in each of them but you need to stay in the know and doing just that is a significant investment of time.
Being a Generalist can be significant effort. If you are not someone who can do this then being a Generalist will be tough and you are best served moving to a Specialist or TechManager roles. For a Generalist the role of a Specialist can sometimes be suffocating since it narrows their tools (and design flexibility) whereas previously they had much more freedom. For a Specialist to move to a Generalist is even harder IMO. In general I see folks transitioning from Generalist or Specialist to TechManagement. Enterprise Architecture or Director of Architecture/Technology can give some techies a breathing space to climb up the management ladder, but stay closer to technology.
It is hard to find the right balance and that I know from personal experience. But most folks go through it, and yes survive just fine. If you have had to move to TechManagement don’t worry, all is not lost. You can still secretly stay awake at midnight and catch up on some low level code prototyping 🙂