Have you asked yourself recently, “What drives me?” We all have a desire to excel in our lives, and reach a level of success that our sights are locked onto. Though often, we may struggle to find the path that leads us there. In my career, I have grown from a junior developer to mid, senior software engineer and tech lead position. Along the way to my current position I also worked on QA automation, DevOps, and solution architecture in addition to being head of engineering and CTO. I would like to share my experience herein with the goal that perhaps you can learn from it and gain some insight as to your path to professional success.
In this article you will find 3 types of advice:
- Two advices on behavior and motivation (Growth Mindset, and Passion)
- Five advices on how to build a career path and skills to consider (IT Star path, Technical, Product, Agile, and Leadership)
- Two advices on how to accelerate your journey (Don’t aim to be the smartest person in the room, and mentoring)
It all starts with a growth mindset. This is akin to making a lifestyle choice to be healthy; though for example instead of a choice to exercise, it’s a behavior set you want to target. Changing your mind, the way you act and approach things will get the ball rolling. You can understand this clearly through the writings of Carol Dweck who lays out her case for the growth vs fixed mindsets.
Essentially, the growth mindset is highlighted by a focus on success. For example, challenges for the growth mindset oriented individual are not something to run from, but rather embrace and take head on as they offer the chance to improve and grow. Failure is not something you want to avoid or shun, instead welcome the opportunity it presents. Ask yourself, “Why did I fail?”, “What went wrong?” and “What could I have done differently, better?” Failure is simply another form of experience and experience allows you to learn and improve. (Fail fast, learn fast; F.A.I.L. = First Attempt In Learning)
Software development and technology are extremely broad. The field is continuously changing and adding new technologies that require learning. To reach for something more in your career, a greater level of success, the industry demands growth from you. I found in my career that meeting this challenge head on with passion and an earnest desire to succeed will lead you to greater success!
From a growth mindset it’s easy to smoothly transition into the need for passion in your career approach. As you know, nothing in life that is worth working for ever comes easy; there are no free lunches. If you strive to reach the level of technical lead, you have to be passionate about it and willing to put forth the effort it will take. Naturally coupled with passion, motivation is key and in my experience, more importantly intrinsic motivation. Your company may offer you some financial incentive to succeed, but this extrinsic motivator has a short life when compared to your own personal motivators.
It’s good when you begin this journey, and even while your mid journey, to take some time and ask yourself key questions. Queries like: “Why do I want to become a software engineer?”, “What was it that sparked my interest?”, “Why am I driven to continually increase my ability in this field?”, “Is it the development challenge?”, “Perhaps the feeling of success when a project is completed, no?” and so on. Some effort put into self-discovery of your driving motivators will help you in reaching your stretch goals and ultimately become a tech lead and go further.
From my own journey, I can tell you my passion in the digital world began with my first Nintendo game. I couldn’t stop thinking about how amazing it must have been to create such a product and how hooked I was on video games. Then my dad bought our first home computer, which drove me to take some computer courses to understand better how to play with this little magical box; as well, it got me to write my first Excel VBA Macro.
I became passionate about building interactive commands where I could see the results with my own eyes; e.g. – click this, and voila with only a few lines of code I made a box appear! From there I was irreversibly hooked, and set out to become a software engineer. As such, I made a decision to continue my study in computer science and grow my passion to build things from simple algorithms and ASCII games, to an ambition to build a Startup SaaS product and become an entrepreneur.
I continued to explore the path of technical excellence and experimented with different roles in parallel needed for building a product as a software engineer (DevOps, Solution Architect, Testing automation,etc.). In time I also understood how important the team and the way of working are to a successful product, and started to discover new passions to explore on these topics. My passion continues to evolve and drive me forward.
Create Your Path: Become an “IT Star”
Now all puns aside, I’m not saying this is like becoming a rock star. But I would like to use this play of words (Become an “IT Star”) to give you an easy framework to help you remember and set milestones and goals to your career growth.
Becoming an I shape first, means you want to focus on the depth of your knowledge. In that, you want to become an expert in one area or thing initially. For example, focus on mastering one programming language and framework; not only how to write a working code, but also what it means to write good code for this language and framework. Moreover, understand how the programming language works behind the curtain, what the coding paradigm is for this language, and what are the design patterns applied for this framework. Mastering one language will set you on the path to mastering others more easily.
Then becoming a T shape means focusing on the breadth. In other words, after mastering your first programming language (the vertical line on the T), turn your attention to learning multiple skills (the horizontal line on the T) and become a generalist in software engineering with at least one speciality. For example, become a full stack developer, learn more about best engineering practices, DevOps, Cloud Infrastructure, Testing Automation, Agile, Security, AI/ML, data engineering, and so on. You may not master all of them right now but you will understand all the important areas needed to build good software and see the big picture.
Star shape (*)
Then become a Star Shape. Usually we refer to it as an E shape or M shape, but I prefer Star shaped! Now I’m aware that an asterisk is not a star, but let me explain my thinking. Imagine the asterisk shape, you can see clearly the five points that almost serve as branches that represent your multiple areas of expertise. In this, your abilities are becoming akin to that star! Continue to grow your expertise in those areas that you are most passionate about or that are needed to be able to work with other people to build great end to end software.
In this path of becoming an tech lead “IT Star” career path, consider 4 areas to grow:
At the beginning your focus will naturally be more on the technical, along the way allot some focus for the other three, and find the balance to continue to grow in these four areas.
Technical: Build strong Technical Foundation and aim for Software Craftsmanship
It’s not difficult to build a working code and be a developer, but aiming for a higher level requires working on your foundation. As mentioned above in the T shape, learning best engineer practices is key to reaching the level of technical leadership. You must learn to build high quality software that is maintainable, scalable and testable. Software is not a generic manufactured product that’s often replaced within a year or two of purchase. A good software engineer can build a program, for perhaps a complicated requirement, that even a junior developer can read, understand and think: “I can do this!”
In order to do this, you need to have a good technical foundation and know best engineering practices. Example of skills and experience you should focus:
- Coding practices (Clean code, SOLID, Single Responsibilities, DRY, etc.)
- Data structure
- DB and Data Modeling
- Programming paradigm
- Design pattern
- Technology trend
This list is a reference from my experience. Of course, there will be some variance in your path if you decide to grow into a more specific technology path like AI/ML, Data Engineering, Web3, etc., but I believe these core categories are applicable in general.
As you grow, you should aim to become the embodiment of the manifesto for Software Craftsmanship (https://manifesto.softwarecraftsmanship.org/). As you likely know, that is: well-crafted software, steadily adding value, a community of professionals, and productive partnerships. All of this will lead you along your journey to Tech Leadership.
Product: How to build a Valuable Product
It may not be obvious for your focus initially as a software engineer, but product skills become more important as you grow to a senior software engineer and tech lead. The different areas/skills to focus on are as follows:
Product ownership: The best way to build the greatest product is to have ownership and work with the Product team.
Technical Excellence (Product Quality): Be able to decide the level of technical excellence to adopt for your product and your team; this connects back to some of the technical skills mentioned earlier as you grow to T and Star shaped. Understand and Explain the value of technical excellence for your product which could be another full topic.
Architecture Runway: Understand what an architecture runway is. Strategize the architecture runway of your product with the product owner or product team. Be able to identify and explain technical feasibility, and plan for its implementation during the product life cycle.
Compliance: Understand that building a product is not only about features, but also compliances (platform compliances, Security compliance, Data privacy compliance, Industry compliance).
Product Strategy: The ability to understand the vision and the goal of the product. To understand the business value of what we are building. Build trust with the product team, and the ability to influence and make decisions together with the product team.
Agile: The way of working to deliver value
Agile is the future, like it or not, but all software development signs point in its direction. Therefore, knowing Agile, and learning to work in that product management environment is a must. Agile will naturally enter your journey to becoming a tech lead. When that happens it’s alright to start by “doing Agile,” applying the framework, but it is more important to learn how to “be Agile”, assimilating the values and mindset of Agile into your team practices. We could also write another full article on it and there is already a lot of literature around it, but below is a quick summary as a Tech lead to learn and master.
First, understand why Agile is needed in software engineering? For those familiar with the Cynefin framework, Agile helps to work in “Complex” situations/products, meaning a situation where there are unknown unknowns and emergent complexity. Moreover, the reality is building software in the digital world falls into the complex category of Cynefin framework.
Second, understand and adopt Agile as a mindset first. What is the Agile mindset? The values and principles of Agile are clearly laid out in the Agile manifesto (https://agilemanifesto.org/). In summary I like to put forward 5 key concepts to build the most valuable product possible in your project context:
- Incremental and Iterative
- Team and Collaboration
- Continuous Improvement
- Technical Excellence
Then lastly, make sure to master practices and different Frameworks. How do they apply Agile values and principles? Be able to guide your team on how to make the best of the frameworks, not just do a meeting because it is part of the framework. For example, if you are using Scrum, do you understand the 3 pillars of Scrum (transparency, inspection and adaptation)? Why do we have 3 roles, 4 ceremonies and 3 artifacts in Scrum? If you cannot answer these, then it’s time to do some exploring: https://scrumguides.org/scrum-guide.html
Leadership: Be a Team Player, Lead the Team
It seems only natural that I follow Agile with the importance of being a team player, and ultimately leading the team. Though before you lead, you must learn to play with the team and become a core member who strengthens and lifts the team’s abilities. Along your journey you will grow much, becoming a technical guru of sorts, but never overlook the significance of learning to work as a team with a group of individuals.
As I discover, starting simple seems the best approach; that is, focus on being a team player to begin with. Once you feel comfortable and confident in your team ability and perhaps your position within the team, take the next step. “What is that next step?,” you ask. Take initiative inside your team, and lead when the opportunity presents itself. This is also the time to improve your communication skills and sharing mindset. Many activities can aid in your growth here, such as:
- Facilitate decision making process
- Technical sharing sessions
- Facilitating a technical workshop
- Doing a meetup presentation
- Doing technical interviews
- Building a technical community with team members (e.g. AI community, etc.)
This is to name a handful as the list goes on and on. Seize these opportunities to grow yourself and lead your team, even helping in the growth of your team members.
By becoming a good tech lead you will have other skills to work on:
- Team Building Leadership skills: motivate, mentor, coach, create engagement, be goal oriented, recognize, give feedback, etc.
- Strategic Leadership skills: analysis and problem solving, facilitation, creative and strategic thinking, negotiation, understanding the big picture, the “why” and the “so what”, etc.
Don’t “aim” to be the smartest in the room
Be smart, but perhaps it’s more appropriate to say be mindful of the situation and your surroundings. Being intelligent and smart is of course important, but don’t aim to be the smartest person in the room. On the contrary you want to work with people smarter than you in some area. If you’re the smartest person in the room, consider carefully how this will help you grow.
Always having the answer is not what you should be aiming for, rather working with people who have more experience. You have the rare occasion to learn from their experience as it can lead to your own personal growth well beyond previous levels. In my career I can personally attest to this as it has helped me grow much and I owe a debt of gratitude to those individuals I was fortunate enough to work with and learn from.
Moreover, Surrounding yourself with people who are more experienced and smarter than you can challenge you to raise your game, strive for a higher level. This can be an excellent motivator to accelerate your learning.
Finally as you grow, increasing your skills and knowledge, your journey will lead you in the direction of mentorship. You might be thinking, “Okay, but how does this help me grow?” A valid question, but have you not considered the individuals who mentored you along your journey? I have experienced having a number of mentors in my career, as I’m sure you will as well. And if not yet, don’t wait, ask people you admire to mentor or at least give you guidance. Mentors can enrich your journey and growth from a young developer into the tech lead you want to become; reaching for those heights is made much easier when someone can offer you assistance.
Looking back on my journey, I’m grateful to those mentors who helped me become who I am today. Now in my position, I enjoy being able to give back and mentor young developers who are hungry to develop their skills and push for a higher level in their career. Giving back may sound silly, but it’s not as it will help you to continue to learn new skills or refine your existing/previous skills. Take your developer black belt to even higher levels! All this without even mentioning the feeling of having a positive impact and seeing your mentee grow!
Tag CloudAgile - Agile Delivery - AI - amazonecommerce - Animal Framework - Attracting talent - Autonomous weapons - B2B - blockchain - businessbuilding - Business building - Clean code - Client consulting - cloud platform - Code Refactoring - coding - Company building - Computer Vision - Corporate startup - cryptocurrencies - de-risking business building - Deepfakes - Deep Learning - DeepMind - derisking business building - Design Research - Developer Path - DevOps - Digital Ownership - Digital Product Strategy - ecommerce - entrepreneurs - Figma - founder equality - founder equity - front end developer - Fullstack Engineer - Growth strategy - Hook model - Incubator - innovation - Iterative and Incremental Development - legacy system - Manual Testing - Metaverse - methodology - Mobile Engineer - Natural Language Processing - NFT - NLP - online recruitment - playbooks - Podcast - Product Design - Product Development - Product Development Strategy - Product strategy - product versions - project management - Prototyping early-stage ideas - Quantum Computing - Recruitments - Remote Work - Research - research problem - Robotics - Sales machine - scalable software - Scrum - Self-Driving Cars - Serial entrepreneurs - Slash - software - software design - Software Development - Software Development Company - Software Engineering - Spotify Model - Staff Augmentation - teamwork - Tech Talks - tech teams - tech vendor - testing playbook - The Phoenix Project - Unit testing - user interview - user retention design - VB Map podcast - Venture Building - Venture building strategies - Venture Capital - venturecapital - virtual retreat - Web3