When I have finished this article I realized it is a very long one. So, in order to simplify it for you, here is an instruction manual how to read it.
1. If you are already working in IT – you are probably more interested on possible career paths and hints which will speed up your career. Just skip to the part where I am claiming that Career Paths are open. You will find there hints on how your career may look like, and how to upskill yourself.
2. If you are a manager or a recruiter, who wants to know if your people need promotion, upskilling or guidance – check on Roles & Areas Heatmaps. It will help you understand what are the options for your people to growth and how to notice a need for a promotion just in time.
3. If you are interested in how software is being built in general – by which people and roles – check the beginning of this article, and skip career paths part.
4. If you wants to join IT industry or make a professional displacement – patience is a key character trait to be trained. As an exercise for this, read the whole article 🙂
Useful materials and links are in the end – but I hope you will stay with me for a while.
This blog post will be a long one – so the introduction has to be quick. Since first mass-produced computers in ’70, the World had been massively changed by IT. First – the computers stopped being separate rooms and became a desk-friendly devices. Then, the internet came – and this was in my opinion the biggest social revolution since the invention of the agriculture and first villages. Everybody started to be connected to everyone – and the devices became more and more portable and integrated. Right now, we are in post-pandemic area, where the most of the businesses and companies survived thanks to distributed systems, internet connection and digital appearance. Those, who didn’t moved to the internet and software support of processes – closed the business already, or will do it sooner or later.
IT World since ’70 also changed significantly. We are now at the Turning Point of Software Area (according to Kersten), where the demand for experts, engineers, designers and innovators is growing rapidly. When I’ve started working in IT Industry in 2012-2013, average salary of junior engineer was about 120% of my country’s average salary. Now – IT juniors salaries are reaching almost 200% of average salary in Poland (based on justjoin.it report from 2022). It may look different in terms of finances in other countries – but there is no doubt that we have more and more demand for Engineers. Coding Bootcamps are boosting on the market making a good profit, headhunters are spending hours in search, and yet 1 million (!) IT Engineering Roles were supposed not to be filled in 2020 (based on https://www.hackerrank.com/blog/unlocking-trapped-engineers/). Let’s face the facts – the market looks very promising in terms of making a satisfactory living, both in terms of finances and growth potential. But.. what does it mean to work in IT exactly? Should I know how to code in order to join IT Industry? What career path can I expect?
My dear Engineers,
this text may have some simplifications I’ve made to make it understandable for people outside of IT or younger colleagues, for whom growth possibilities within our industry may be fuzzy. Kindly please, let me know in the comment, if there is a different perspective coming from your experience. Let us make this post a space to share our experience!
How is Commercial Software being built?
Designing, building and running software is not just a process – it is a cycle of changing business needs and ideas, to which Software Solution has to be adjusted. Depending on the framework or organizational culture, those cycles can have a yearly, monthly, weekly or even daily occurrences! Unlike manufacturing process (ones a car leaves the production line, it is now not coming back to it), software is being adjusted to new reality constantly. But, fortunately, within this cycle we can identify areas, on which later on we will assign proper roles and skills.
In short:
- Business Domain area is where the business objectives are being done. This is where the vision is being clarified – by people who knows this business area the best (or ones who are able to help other define it by asking proper questions). You might think that this area is not related to IT at all – but it is not true! This is the area which IT should investigate deeply – because we build the Software to address those business domains needs! And our Software should reflect the structure of the Business Boundaries & Areas.
- Management / Leadership is where the business objectives are being decided to be empowered with Software – and where decisions about the teams and people are being done.
- Agile Practice is still a new area for many Organizations. This is the place where we design the Team Topologies, Interactions and Operating Culture to build and maintain the Software. This area is crucial to build a Software which will survive more than one cycle of changes, still producing the Business Value – because making a good software is about to structuring the great teams and designing their communication.
- Requirement Analysis is an area of designing the software – identifying what functionalities is most important to deliver Business Value, how they should be built and how this will reflect to Software Lifecycle Strategy in the future. Within requirement analysis, we are forming a delivery backlog which (without a lot of clarifications) can be delivered by Engineers.
- Programming is the most commonly-known area in IT – but, as you can see, only one of many. This is the place where software architecture and code are being produced, based on the need, backlog and designs. You will soon see, other areas decisions and practices are influenced with the programming deeply.
- Testing – I was struggling to put it together with Programming once I was designing the structure and images of this post. But, parts of testing is actually present within all of those areas – it is not only the code we are manually testing, but also writing automated scripts (Programming) to do it, enabling those scripts into deployment automation (DevOps), checking software immunity to breaches (Security & Infrastructure) – and also validating, if the code we delivered is actually what business (Requirement Analysis) and our Customers (Business Domain) requires – which allows us to make further decisions (Management). So – testers have their own, crucial area within my big picture. It is also because tests are sometimes treated as spare, once it should be treated as equally important than programming or running the software. There are even the techniques and frameworks (like Test-Driven Design), which starts with testing before writing actual code!
- Infrastructure & Cloud is the place, where our code is being deployed to the computer, which then runs it. Those computers are servers, virtual machines, Kubernetes clusters, serverless functions or services in the Cloud. This might sound scary, but in the end – there is a computing power running the coded instruction, no matter how many virtualization or abstraction layers we will put there. But those layers are crucial for scaled, enterprise software – and this needs to be designed and managed as well.
- DevOps is the place, where we make sure we don’t put the code into infrastructure manually – and then we don’t pray it works, but instead we monitor application on production. DevOps is also the place, which creates Platforms for Developers in order to speed-up their work – providing them with repository and often automating the infrastructure or security components. In other words – Developers are building Solutions for Business, DevOps Engineers are building Solutions for Developers.
- Security is the place, where we make sure our code and infrastructure is immune for hackers and viruses. This area will play more and more important part in IT World, since we are running most of the businesses now online. For many engineers within other areas, security is sometimes perceived as a showstopper – but in the end of the day we are all grateful that we can spend the time providing new functionalities instead of extinguishing the fire of leaked data or misuse of our solutions.
Uff. We have areas covered – so now, let us focus on people who fills those areas with their competences.
Skillset & Mindset Levels in IT
Let us first start with overall progress level of Engineer or Expert within IT – because being a Junior, Mid or Senior is not only related to technical skills, but equally important soft or analytical skills as well. IT Professional is somebody who plays in the Team – because commercial, large-scale software is impossible to deliver by one person in a time and scale which our Business People requires. It is a myth that Software Engineer is a nerd who can’t talk to the people – in fact, the sooner you understand it is empathy and possibility to understand the next person (with knowledge of techniques and tools supporting it) the factors which will boost your career – the better!
In order to simplify and find a common language or view to other industries – this is how I see overall growth of a person in IT.
You probably noticed, that at some point, there will not only be horizontal progress – but also vertical changes in your profile, which you might want to make. In fact – in IT industry, managers, experts and advisors are in the similar level in terms of seniority and mindset, just putting more interest into different aspect of software delivery. So… what does it mean to be a junior, mid, senior or expert? Let me clarify that. And I warn you – it won’t be about the years of experience – rather the skillset and attitude!
Junior is a person, who requires an assistance and guidance in terms of work prioritization and execution. If you are a Junior, you should be supervised and mentored by more experienced colleague – especially within your cooperation with stakeholders and partners outside your Delivery Team. So – if you need an assistance in either technology and communication topics – you are a Junior. It is important to notice, that you can have an expert level of tech skills – but without the progress in soft skills, in my opinion you still stay on Junior position (and other way around) – because you need assistance from other team members in everyday work.
Mid is a person, who can deliver parts of the business value (supported by software) by the person own. It means that the person is able to independently clarify requirements for selected topic with partners or stakeholders outside the Delivery Team – and then independently deliver it (coordinating it with the rest of the team). Mid-level people are very important in Delivery Teams – because main development power (in terms of producing the code) lays in their hands.
Senior is a person, who in general does not need any assistance in terms of delivering the business value through software. The person has both technical skills to design and build application with a mix of soft skills and techniques which senior uses to make the delivered solution valuable. In short – if you leave a senior with a goal and vision, this person will make sure it is done end-to-end – both from technology and business perspective. Without a lot of babysitting from anybody 🙂
Expert is a guru within his area. This is a person, who can solve edge-case, specific problems and provide customizations to tools and technologies, where Senior people has lack of ideas. The main difference between Expert and Senior is a focus on particular set of technologies – while Senior should be as technology agnostic as possible, Expert spends the time on going really deeply into particular area – being able to optimize the solution not only to deliver business value, but also reduce the TCO or combine it with bigger architecture. Experts are very often awarded with titles like Most Valuable Professionals (Microsoft) or Ambassadors (MuleSoft) within their area of expertise.
Manager is a person, who focuses mostly on making business decisions and leading people. If you are a Manager, your Tech Skills will probably start decreasing – because your focus will be on delivering business value within more than one solution and making decisions which impacts overall Organization performance (in many aspects, like financial, scaling, people rotation etc). Managerial position is the fastest way to became Principal – but you need to be able to take not only responsibility, but also accountability on your Team performance, decisions and business outcomes. Trust me – it is not work for everyone, and not always the most profitable one within those above!
Advisor is a person equally interested in Business Strategy and Technology topics. The person needs to understand how software architecture reflects business boundaries, how the overall lifecycle of software development supports (or canibalize!) the business vision and goals. This person can map Business Capabilities and Domains with Tools and processes around them – in order to set up Teams and Applications in the Model which will bring the biggest value. In short: Advisors supports Managers and Principals to understand Experts and Seniors – and align them within common goals.
Principals are people working on Company Vision & Strategy Level, making executive decisions on organization growth and goals. They are accountable for the lifecycle of Business Initiative (which every company is). Principals are very busy people – so they need good advisors (both business and technology) and tacticians (managers) to lead the company in right direction. Principals also shapes organizational culture – because it is very hard to be done from bottom to top. And the culture shapes everything – also software architecture (check on Conway Law)!
As a conclusion – please, take a look on this chart below, where I’ve described my view on relationship between tech skills and “soft” – or as I prefer – business skills within the seniority level of a person.
Career Paths are open
Ok – we have clarified seniority levels and areas within software development lifecycle. Now it is a right time to combine those into one picture. The most important sentence in this whole article is – there is no predefined Career Path (or Ladder) which you will follow within IT. If you start as a Programmer, it does not necessary means that next year or in next five years you will be doing coding. Treat a career development as a network of air connections – where from one hub you can fly to few others. If you change the area of interest – the knowledge you gained from the previous one will stay with you, step after step building a big-picture of skillset and mindset which will allow you to growth. Of course it is very hard to skip from Infrastructure Engineer as a Junior to Business Analysis on Mid Level – but being Infrastructure Engineer will give you some hints what Developers need and how code is built built – and from this, it is a good way to understand how to gather the requirements for building the application also from functional perspective.
In my opinion, the best way to start is to became a programmer. Not because I have started within this role – but the programming is a heart of Software Delivery, where all areas – both business and technology – are meeting together. In programming you will also have a chance to see the full lifecycle of Software from the very beginning of your career – which will simplify the selection of the area which will bring you the most of the satisfaction. But – it is not the only way to start the career within IT – if you have analytical mind, a lot of empathy and ability to decompose a big problem into small problems – you can always learn System Analysis Frameworks, Tools and Techniques (UML, BPM, User Story Creation, Event Storming, Interviews, UX Prototyping etc.) to start with requirement analysis or business needs discovery as Analyst.
Professional Displacement
IT is now present in most (if not all) of the industries. So if you work as an expert in any industry – it does not necessary mean that you will became a Junior if you change your career into IT (or – you will be this Junior for a very short time).
Coming from business area of your industry, you already know what were your needs and which functionalities you had been missing in tools you have used. You have also a deep knowledge of Business Processes within your industry. In your case – I would start the career in IT as System Analyst, focusing not directly on programming – but rather on designing the software and clarifying the requirements so they are understandable for developers. Of course I encourage you to spend some time on learning how to code (it is necessary to be a good System Analyst) – but you don’t need to be a developer in order to start.
Example: You are a KYC Analyst in the Bank. You know well anti-money laundering processes and regulations. You had been using software tools in your everyday work – and have some annoying or missing functionalities there (or ideas on automation). Find a project within your organization, which is aiming to change those tools and build something new. Ask to be a part of Delivery Team. Soon it may appear that it will be you who define requirements, and after some time – manage the product vision and scope. Voila – you just became a Product Owner, a senior position in between IT and Business.
One warning on the end. IT Industry requires constant learning and adopting new techniques and technologies. You are going to spend a lot of your free time learning. Working in IT Industry requires unlimited amount of patience for everyday failures – just to have one success after a day/week/month. It also requires deeply analytical mind able to decompose big topic to bunch of small topics. Your goals are not going to be big and spectacular on which you are going to have a spectacular success or spectacular failure – there will be a lot of small steps until you realize, that this big and spectacular goal is actually achieved in a way you haven’t anticipated. If you are ok with it, and you feel a challenge reading it rather than sadness – IT is for you!
Examples
A career path of Developer, who became Development Expert
Mark started his career as Junior Software Developer after studies. His technical skills in Java had been growing – and he learned basics of Test Automation, Agile approach of Products Delivery and how to construct business requirements into stories which are understandable for Programmers. He became a Mid Java Developer and important part of Delivery Team of Lending Product in the Bank. Soon, he started to take over the design of components within this Product – but his interest in Java and Java Applications Lifecycle became growing. Being a Senior Java Developer, a person responsible for technical delivery of the business value within the Team, Mark spent his free time learning more about specifics of Java, its containerization, monitoring of Java-based applications, Java security weaknesses and overall TCO of apps written in the most common (2022) language. Soon, Mark noticed that he became a valuable part of Java Community and starts to share this knowledge on conferences. He is also asked to support unsolved mysteries in other Projects. He never noticed he became a Java Expert – but he is 🙂
A career path of Developer, who became Head of Delivery
Tracy has started her career as Junior iOS Developer, joining a Team working on Fitness Mobile Application after her studies. As fitness was her hobby, she always though about the end-user experience while developing her stories. She liked to work with her business colleagues – and soon she noticed that gathering requirements with a knowledge on software development is a better role for her. She became Fitness Application Analyst, translating business requirements to designs understandable by Developers. While still working in Fitness App Team, she gathered more and more knowledge about how the requirements corresponds then to full product lifecycle. At some point, she knew better the requirements and code than other developers and analysts – and she was asked to design new parts of the application, becoming Solution Architect. Once her boss left the company, she was the only person with both business domain and architecture knowledge of the Product – so she asked to independently make decisions on this solution in both business and technical areas, becoming Product Manager. After some time, Fitness Application Startup grew (also because Tracy was very successful managing the app), and there became more and more additional services provided by the Company. Tracy knew the core product and the business the best – so she was asked to supervise provisioning of the new services and products with alignment to Company Strategy. She became a Head of Delivery – and probably very soon she will be Fitness Startup COO (who knows!)
A career path of Sales Person, who became Product Owner
Andrew started his career as Sales Person. He was working in CRM to track relations with his customers. He really didn’t like the app he was using. During a coffee break he heard in the kitchen, that CRM will have some new functionalities delivered soon. He asked those guys what they do – it appeared that they are CRM programmers. He invited them to dinner to ask for those new functionalities – and was horrified when he discovered how those new functions are working! It would be counterproductive for end users like him! So he asked those developers to meet him with their manager – and after some corporate fighting between IT and Business organizational units, Andrew joint the CRM Team as System Analyst. At first, he didn’t knew how to form the requirements so the Developers can understand it – but soon he learned (those guys from dinner really liked him). But, there was a sad thing he noticed – that the Team had troubles contacting other units and organizing the work to understand what the company really needs. They were also constantly fighting with other departments and didn’t actually felt the need to deliver CRM changes frequently (which he, as a Salesman, expected!). Andrew knew something is not ok, but he didn’t know what. He started to make a research and soon he learned, that there is no need to make a release once a year – it can be done more frequently with Agile Practice. Andrew liked that idea and started upskilling himself in this area. He also tried to write to code on his own to better understand the relations he wanted to heal. After passing PSM1, he started to play a role of a Scrum Master within the CRM Team. He was progressing in his management and leadership skills within the Team – and the Team noticed that the complex relations and communication problems disappeared when Andrew pushed the Team forward and removed the cognitive load from the outside of a Team. The longer Andrew worked in this Team, the more aspects of forming the right requirements and full software lifecycle he understood – and one day he asked his Manager, if he can make independent decisions about how the CRM will look like. His boss agreed – and Andrew is now a Product Owner, shaping the Tool to fit the business people (and other Andrews like him in the past) real needs!
Career Paths Map
As you can see by the examples above – the career in IT industry is really a dense network, not a straight highway! I know it might be overwhelming, especially if you enter any website with job offers – so many roles and descriptions, and everyone is demanding to know every technology and framework. Let me tell you a secret – trust me, you don’t need to be a guru in each of them. It is impossible. And – once you select a career as a Developer, it does not mean that you are going to write the code till the end of your days. Just look at the picture below. I have tried to map the positions into the areas of IT and your seniority level. The more senior you will become, the more wide spectrum of delivery aspects will be expected from you, because your job will focus on combining it. But as I said, don’t worry – you do not need to be a hero in each – if you choose the ones which interests you the most, I am sure you will find a proper role for yourself. Also – be prepared that at some positions or roles, required level of skills will evolve – because being a Manager or Advisor you will rather make decisions and lead people in your area of specialization rather than write code on the project. If you love technology – maybe an Expert role will be your target – but remember, you don’t need to decide in the beginning!
There is only one thing to mention – your soft and business skills can never decrease. You will find out that at some point domain knowledge, mindset, overall experience in multiple areas are even more important than specific technical skills. The last advice from my experience – decide on your next steps once you are a Senior, and you are closing to expert level of one or few technology topics. Horizontal knowledge will be more important after it, but your horizon will not be that wide if you didn’t experienced vertical specialization first. We already have too many generalists and people who can talk, but not who can execute and deliver. Trust me.
My personal journey
I am glad you have expanded this tab! It means that you want to check a real-case scenario. So, in short – during my engineering studies I have started my professional journey in software development in 2013 as Junior Integration Developer. Before I was robotic tutor – so I’ve learned how to describe complex programming topics with simple language, understandable by kids – which proved to be my crucial skill very soon! So I spent first 2 years writing code in WebMethods Platform, enhancing it with Java, Groovy and automated scripts in SoapUI to test my interfaces. Within this time I also noticed that I am good at understanding business needs and decomposing it to the language which I and other developers knows. So after 2 years, I became a System & Business Analyst, and result of my work was no longer a code, but a specifications in UML, prototypes, BPMN and User Stories. Programming was yet still close to my heart – I always wanted to know how things works, how to deploy them, how its architecture correlates to the business value. This led me to Application Management role (simple to System Analyst, but with more technical hands on), and after that – a short journey as Project & Service Delivery Manager. I was managing a Team responsible for Delivery and Operations around TrackWise Ecosystem – so most of my time I’ve spend on demand management and team leading. This was when I’ve noticed that management is actually not my strong side – so I’ve came back closet to the technology which at this point of time seemed to me as running too away. For next three years I was playing a role of Solution Architect of Integration Platforms – and after that, on Microservices Architectures, having a hands-on experience with MuleSoft and Streaming Architectures. As an Architect – I was always very close to the business, and I did my best to deliver the actual value – which soon appeared as good character trait for Product Manager, when I was making a decisions on the shape of DevOps Platform. This allowed me to learn more about the Cloud & DevOps topics – and focus on Agile Delivery techniques. It also gave me an insight on Development Teams cooperation, since the DevOps Platform was a heart for running the outcomes of many developers work. Seeing big picture, and many times Conway Law (google it!) in practice – I’ve noticed that architecture is actually about the way how people work together. With this mission – to improve this part and make it more mature – not only with the technology tools, but also the collaboration practices and teams structure – I moved more into Consulting, becoming a Technology Strategy Consultant. What is different from other consulting activities is – I really focus on the execution phase, because it is only there where I have a chance to see if I haven’t made a mistake (or if I did – to correct it). What will be my next step? I have some ideas, but for now, I will keep them to myself 🙂
Roles & Areas Heatmap
Wow, you are here! Congratulations, you must be a very patient person! I am sure you will manage to find your way in IT Industry! Ok, so now – a little bit of skills level depending on your seniority. It is very important to remember, that when you grow as an Engineer, Analyst or any other role in IT Industry – at some point you need to be “at least Junior” in more and more areas of software development. At some point some tech skills can even decrease – and this is a normal situation (if you ask me now to write Java Consumer for Kafka, I will probably spend 10x more time on it than I would do in 2015 – but this is ok, because I will still be able to deliver it somehow). But, even if you forget how to define the variable in JavaScript – you will still remember what was a strength, what was the weakness of this language, and what were your needs and problems when you were using it. This is what we call experience, which at some point of time you need to have more and more within different areas of software lifecycle.
I hope that below heatmaps will help you understand where you are with your career (for the engineers), what are the possible positions and skillset required for particular role (recruiters and beginners) – and how to support your mentees or team members evaluation (mentors, managers). Below the heatmaps you will find some useful links – because this article is just a high-level view on this very wide topic. And it is long, because I am still a Junior Blogger.
Those heatmaps (and the whole article) are my personal opinion on how the careers and roles in IT looks like. Please, don’t hesitate to start a discussion, no matter if you agree or disagree!
Useful links – and how to start?
Lets begin with how to start. First – select the area of software lifecycle you want to pursue! You can always ask for my advice (free of charge – this is my open-source project) if you have troubles within your decision. Second – start with self-learning. For example, visit https://udemy.com – there are plenty of useful courses and trainings on any topic you can imagine. Even better – there are a lot of free materials in YouTube, like this Free Code Camp channel: https://www.youtube.com/c/Freecodecamp – where you can find plenty of courses within multiple aspects of IT Industry. Third – in my “Beginners and Students” tab you will soon find more vertical insight into specific areas of Software. I am planning a short course on starting a career as MuleSoft Developer (since it is a low-code platform, so the entry level for understanding basic concepts will be lower than with programming languages).
Last thing, more for already experienced specialists – there are some pre-defined paths to follow in order to increase your seniority level (especially in tech): https://roadmap.sh . According to one of my mentors view – on which I fully agree – if you already are a developer, this paths will allow you to focus on crucial areas within your expertise, and not to loose this focus on unproductive activities. Keep up to it!
My dear Engineers,
If you have any useful materials – let me know! I will update it here.
Remember – we are addressing younger colleagues, so link to documentation will probably not be a good idea.