When I began college, I knew I wanted to be in a technical career, but didn't know what I wanted to do. I started in biomedical engineering and did not like it at all. I had a hard time getting excited about the work I was doing and started getting bad grades due to my lack of effort. I also tried out business classes and had a similar experience.
Then, I took my first intro to programming course to try it out. I was always pretty good with computers, so I figured that might be a good option. I absolutely loved it. I picked up on programming pretty quickly and would spend lots of time trying to figure out how to optimize my code. I then decided to switch my major to computer science after my sophomore year, giving up most of my college credits thus far.
During my 5th year, I started picking up side jobs to earn money while I was still finishing up school. I did some IT installations and made websites for small businesses. I also started mobile app development and made a few apps for start-ups in the health care space.
I then came across an opportunity for a full-time role to build a mobile app for Total Expert, which only had one other full-time developer at the time. Initially, I had planned to continue going to school at night to finish my degree, but I eventually dropped out to spend more time working. I shifted from mobile app development to full-stack web developer as priorities changed. I built out and scaled many features for the platform, and was promoted to a senior role. As Total Expert continued to grow, we eventually started breaking out into teams to focus on different areas of the platform, which is when I was promoted to a team lead. Total Expert now has over 250 employees and raised over $80 million in funding. I feel very grateful for the opportunity to get in at the ground level and watch this growth unfold over the years.
My day usually starts with a quick stand-up meeting in the morning to sync up with the rest of the team and prioritize tasks for the current day. After stand up, I usually start with code reviews. This involves looking over proposed code changes from other teammates and commenting or asking questions where needed. I typically spend 1-4 hours reviewing code. Then, I will usually have a few meetings with other teammates to answer more detailed questions about current work, or with other teams to pass on knowledge about previously developed features. For the rest of the day, I try to find time to focus on programming. Context shifting can be difficult when you are deep in the code, so I typically leave this task to the end of the day when there are fewer distractions. While all of the above is going on, I often get a lot of questions in Slack from other teams and departments, which I try to respond to promptly without having to re-prioritize too often.
My favorite thing about being a team lead is being able to solve complex problems and follow the implementation all the way through. It is very rewarding to lead the development of new features, and see the final results used in the product. A team lead is a nice balance between planning, hands-on coding, and mentoring teammates.
A lot of time is spent in meetings and code reviews. If you aren't into that sort of thing, a more heads down development position may be a better fit.
The earning potential is very good and very stable. Compensation is pretty comparable to a senior software engineer, typically slightly higher.
The most straightforward path is to start in college, pursuing a computer science degree. This is a great way to get your foot in the door as a junior software engineer. Alternatively, there are a lot of great coding bootcamps out there that can teach you the fundamentals and help you land your first job. Most of the practical knowledge will be picked up on the job. After working as a junior for a while, if you are a consistent developer who can get a lot of work done, the next step is senior software engineer. A senior role typically comes with better pay and more responsibility. From senior, if you enjoy working with others and would like more control over development, seek out a team lead opportunity.
A strong technical background in software is a must. Even if you aren't doing much programming, you still have to understand what you are asking others to do, and the pros/cons of various implementation options. Technical communication and documentation is also a handy skill. The more you can explain through documentation, the fewer meetings you will have, and fewer questions to answer.