I recently posted a comment on LinkedIn on how recruiters don’t usually reply to my messages when I mention that I am trying to help my Computer Science students to find employment. Some recruiters read that post and contacted me… reminding me that companies usually seek highly experienced programmers. That seems logical. But is it really a good idea?
Team composition is not just a business decision. It is, above all, a technical decision. It has a great impact on the software development process, on the technology choices, on how detailed the system design should be, and ultimately on the product’s success. I can see why business managers would believe that it is solely their responsibility. After all, isn’t it just about hiring the best coders we can find? – No, it isn’t.
Actually, things are (and should be) more complex than that. If by one side we want a simple solution, on the other side we need to be careful with simplistic lines of thought. Failing to consider other relevant criteria would likely lead to bad choices. But what else should we consider besides the recruiters’ code tests and resume?
Software Architects are specially equipped to assist with hiring processes and decisions regarding team composition. We have a clear view of the multi-faceted needs of a project, including both technical and non-technical aspects. (a) Will the project require mathematical precision and calculations, or will it be more about data manipulation? (b) Will it require diligence on documentation? (c) Will it require from the developer the ability to learn new things fast? (d) Will it require someone with great attention to visual guidelines? (e) Will it envolve massive chunks of complex code or will it be pretty usual? (f) Should the developers favor speed or accuracy? (g) Will it use regular algorithms or will it require ingenuity? (h) Will it require more interpersonal interactions with stakeholder or will it be more focused on coding? (i) The technologies used have user-friendly documentation or is it very dense and technical?
We could continue on and on. Fitting the right people for each spot is more than just trying to get the most knowledgable person every time. Programmers are humans, obviously. But we forget that besides knowledge, they are also deeply influenced by their natural aptitudes, preferences, dreams, goals, etc. Selecting a super-logical hard-core coder to lead a team of temperamental programmers will not end well. Also, they are usually not too good at simple tasks like meeting with stakeholders to collect feedback and keeping morale up. Great programmers are not necessarily great managers/leaders. And the side effects can include reduced creativity, hinderance of collaboration within and across teams, and even the failure of the project.
Salary is another matter. A project doesn’t need to be filled with senior developers to be successful. In fact, the people who tend to do excellent in job interviews and code challenges are not always the best problem solvers. The best solutions are not always the ideal solutions. Working outside the box and accepting optimal solutions, instead of perfect solutions, is not the strong suit of many people, especially those who have a very logical/mathematical way of thinking. That’s just the way humans are: people who are too logical/mathematically minded, they normally score lower in soft skills, creativity, ingenuity, balanced perspectives, collaboration, and so forth.
If Software Architects should assist managers in guaranteeing the success of software development and software products, then topics like “hiring processes” and “team composition” should also be part of their fundamental responsibilities.
Companies want experienced professionals. I understand that quite well! =) But that is especially true because most IT organizations are just trying to survive and put off fires. Desperate for not thriving as they should, they start to think that they can’t afford anything less than “highly-productive” individuals. That is a very linear way of thinking. Their mistake, however, lies in believing that (a) the candidate’s experience listed on paper, and (b) how well they do on job interviews and code challenges, will directly correlate with productivity and quality work.
Most companies want superstars, even if they oppose the notion of it. They might claim that they don’t want superstars. But at the end of the day, that is what their job descriptions are asking for. They want people who: (1) can remember the syntax of multiple languages by heart – including their multiple versions; (2) knows how to operate fluently many technologies, including some that just came out in the market; (3) have memorized dozens of algorithms and design patterns – including their names; and (4) have years of experience listed on a paper.
But can resume really speak to the actual collaboration that those peoples brought to their projects? Is it possible to find people who remember all that is asked on the selective processes, or do they simply memorize in temporarily for the interviews? And if there are people who can memorize all of that for indetermined amounts of time, should we count that we will be able to find them? And if we do find them, would their salary justify the investments in our products? And if we can find and afford them, how likely is it that they will also excel in all soft skills necessary for the adequate conduction of the projects?
I have found that those technical memorizations are not as valuable as people think. With high-speed Internet and Google, any developer can refresh or learn a new concept in minutes. Inefficient loops and long chains of if-statements, though ugly, are less impactful to the success of software development than other non-technical abilities, such as communication skills and work ethics.
According to a research done by Google’s HR department, the belief that gathering senior developers is all it takes to achieve success is wrong. In fact, that might be precisely what leads to a toxic environment and lower performance. They also found that the opposite is true: If you surround yourself with people who have great values such as strong work-ethics, dependability, coachability, respect to others, communication skills, and commitment with continued education, your team will go further and achieve higher performance. Both (a) the quality of work environments and (b) psychological safety start with the proper selection of personnel and flows into team management and composition. Just rules and regulations have little value here.
The recent graduates that I feel comfortable enough to recommend for job positions might not be senior programmers, but they all have a solid technical foundation that will allow them to reach a senior-level much sooner than most people, including those who simply accumulated a long resume. I am very careful with my recommendations, so they will always carry a lot of weight.
The combination of Virtues + Solid Foundation is more valuable to me than knowing how to re-structure a complex array by heart. In fact, I believe that the old combination of “experience + whiteboard-coding” as criteria for candidate selection is starting to get in disuse among most technical managers that I know and respect. Historically speaking, that approach did not lead to quality people as expected. School-grades and honor-classes used to be used as selection criteria, but it was also abandoned in the previous decades. Why? Because it did not really mean much. It did not increase the number of quality-developers in their organizations.
So, I am sure that, with time, companies will understand that teams do not need to be completely composed of senior developers who maxed out coding challenges. A great lead-developer surrounded by quality people will bring much better results.
Ps.: Side note – Part of my personal and scientific research nowadays is on “How to shorten the time necessary to bring an IT professional into senior-level and architect-level”. I am working with a highly decorated Research Professor and pursuing Federal Funding to put our personal observations to the test and check if they can be scientifically validated or not. And if so, which of the advanced teaching strategies that we identified would yield better results? If you want to hear more about it, feel free to reach out to me!