Most of the software architects (including myself) emerged with a technical background. Most of them are started their careers as developers or junior software engineers. Most of the software architects attaining that title just by organic career progress in an organization. Is this enough? Don’t we need some special skills and knowledge to become a software architect other than what most learning from their 12–15 years’ experience in the development or other relevant technical background.
In my case, I was very lucky to acquire specialized training as a software architect from Virtusa. What Virtusa did was, picked some senior tech leads who are in the edge of their career to become software architects and let them undergo very rigorous year-long training program. It was not an easy training program at all. Following are some keys aspects that I identified as what you should poses as a software architect. Please note that this is not an exhaustive list.
This is all about the ability to ask right questions. What are we going to build? Why are we building it? What are the tradeoffs? What do someone really expecting from what we build? What are the skills of the team? At this level we should not just build what we have been asked to build. We should dig deep and identify what we need to be doing. And most importantly, we should listen to the answers and analyze them thoroughly. Listening and analyzing the answers is also equally important as asking the right question.
Good Communication Skills
This is obvious skill that you should have. And it is more generic. If you are going to hire a developer, and if the resume says, “Good technical skills”, what does it mean? They obviously should have good technical skills. But what are the specifics? Communication skills are also the same. What specifics? Good documentation skills to write documentation such as Design and Architecture documents. Good written skills to communicate with the management, clients and peers via emails. Get specific requirements from clients etc. It is a massively broad spectrum of skills. It doesn’t matter you are a software architect or not, knowing how to talk to people well is a very essential skill that you should have. Talking to computer is not the hard part but talking to people.
The software industry is one of the most rapidly changing industries in the world. New frameworks, new languages, new architectural patterns, new hardware stacks and many more. As an architect we need to adopt to these changes very quickly. We cannot say “This is the way I know, and this is how I did it over the last 5 years and I am going to do it that way!” We need to search these new changes and adopt to them. And other important thing is you should be very open minded in these things. Being a human, we cannot absorb all the new things that are emerging every day. So, one of your junior developer might come up with brand new tech where you can achieve your goal very efficiently. So, you should be able to evaluate it correctly and adopt to it.
As a junior developer, we used to get assigned our work. Very specific, time bound, detailed tasks and most often with the tag “this is how you should do it”. But in this level, do not expect very detailed specific tasks. But what you get assigned is a whole project(s). And when you ask from the business “what is the most important one out of those tasks”? The usual answer is “All of them!” and we need to get all done by next month! So, this skill is bit difficult to master in a way to satisfy all the project stakeholders.
This is also obvious. But the most important thing is how quickly you can learn these technical skills and ability to use them. And most importantly you should be able to demonstrate those skills as well. Most of the Technical architects are not willing to get their hand dirty by doing coding. But as an architect you should keep all the hands-on skills that you had throughout your career. At least you should be able to do some POCs and demonstrate.
Scaling (Skills )
The best way to become 10x developer is teach at least 9 others what you have learned. Sharing the skills and experience is very important aspect in this job role. One of the best approaches that you can try is pair programming. Many would not argue with me in this aspect because they might say that seat two developers in the same machine would damping the productivity. But if you think deep, we do not perform coding all the time. It is all about thinking and converge in to solutions. So, if you have two (or more) brains with different skill set, it would help this thinking process a lot. One other way is Mob programming. It is to bring everyone to a room and have a shared keyboard and completing the task.
This is one good aspect where you can give back to the community. This expands from open source code contributions, tutorial blog posts/videos to public speaking. This is very good for your company or product as well. People would speak about you and the good things that you do the community as well. And apart from that it would help others to understand the technical skill set that you and your company have. If you cannot go out from your company, you can try at least internal training sessions.