Surviving and Thriving in Tech: Timeless Advice from Three Decades in Software Engineering

Recently, I came across a tweet asking what advice seasoned software engineers would offer to those just starting out. This made me reflect on my early days in the field and consider the guidance I would provide after three decades in this career. Through public speaking, writing books, maintaining a popular blog, teaching at a university for 18 years, being recognized as a Microsoft Most Valuable Professional, and hosting an internet show with an average annual viewership of 250,000, I’ve shared a wealth of advice over the years. This guidance has evolved with my experiences, and in this article, I’ll distill fresh insights drawn from decades of learning.

As I reflect on navigating the job market after 30 years in the industry, I’m struck by the lack of guidance I had when I first started, particularly in dealing with ageism and the later stages of a career. I remember reading in a magazine in the 90s that once a software engineer turns 50, their salary tends to decline—a sobering realization that underscores the importance of preparing for this milestone to sustain one’s career trajectory. However, I never anticipated just how challenging these later years would be. I can confidently say that the first 15 years of my career were far easier than the last 15. My goal now is to equip the next generation of software engineers with the insights and strategies they need to overcome these challenges, ensuring they can thrive without facing the same struggles.

In the following sections, I’ll share my top six tips for building a fulfilling and successful career in software engineering, drawing from the wealth of experience I’ve accumulated over the years.

Tip #6: Be a Knowledge Sponge: Essential Strategies for Thriving in Tech

At a Code Camp conference in San Diego, I interviewed attendees about why they enjoy community-run conferences. One attendee described herself as a “knowledge sponge,” a phrase that has always resonated with me. She was spot on; to have a long and successful career in tech, you must be committed to continuous learning. I didn’t fully grasp this when I started, but I certainly do now. Learning new things has always been a passion of mine, making this career a perfect fit. Like being a musician who can never master every song, in tech, you can never learn everything—our world evolves daily. If you don’t enjoy learning, especially on your own time, this career might not be for you.

However, trying to keep up can be incredibly stressful. One of my first professors called this “technostress,” and I have experienced it to the fullest. The longer you stay in this career, the harder it becomes to keep pace with the rapid evolution of technology. Regardless of your experience level as a software engineer, you need to be aware of this challenge and have a plan to address it.

There are many ways to stay current with technology. When interviewing engineers, one of the last questions I ask is, “How do you keep up with technology?” If a candidate doesn’t have a solid answer, it raises a red flag and heavily influences my decision on whether to move them to the next stage of the process.

Effective ways to stay updated include reading books and blogs, watching videos, attending classes, listening to podcasts, joining user groups or meetups, and attending conferences. Another valuable method is learning from more experienced engineers within your team or company. During any of these in-person learning opportunities, be sure to ask questions. I’ve written about these learning methods extensively in the past.

Teaching at the University of California San Diego for 18 years significantly enhanced my learning. When students are paying to learn, I had to ensure I was well-versed in the subject matter. I purposely chose to teach classes on topics I knew little about. For the first few semesters of a new class, I spent about 40 hours a week learning and preparing for the next class, on top of my full-time job.

I also founded a local user group and spent two decades running it. People often asked, “Dave, how do you know so much?” My answer was that I ran a user group and attended every meeting, even when the topic wasn’t immediately relevant to me. This gave me a well-rounded understanding of the tech world and its possibilities. While I couldn’t code everything we discussed, I understood how it all fit together, which helped me become an architect even without deep experience in every area.

Writing is another powerful way to learn. For example, I gained deep insights into code and application performance while writing the last two editions of my code performance book. Analyzing every aspect forced me to discover the most efficient ways to write code, which has benefited the companies I’ve worked for by enabling me to solve serious performance and memory issues over the last decade.

In my experience, most companies provide little or no time for learning. To stay current, we must invest our own time. Many companies have reduced or eliminated their training budgets, which many engineers once relied on. The same goes for sending engineers to conferences, which I believe is the best way to get exposed to new ideas. Therefore, it’s crucial to have a yearly plan to keep up with technology—and to stick to it.

I recently conducted a poll on Twitter, asking engineers where they learn new technologies. As you can see, the vast majority of respondents indicated they learn both at work and on their own. This has always been true for me as well. Relying solely on work or self-study can make this career more challenging. To become a better engineer, it’s essential to continuously learn both on the job and independently.

Tip #5: Stay Marketable in the Ever-Changing Tech Industry

One crucial aspect many developers overlook is the need to remain marketable. This isn’t something you can afford to neglect until you’re ready to switch companies or teams—it’s a continuous effort, especially given the volatility of the tech job market. You never know when you might walk into work and face a layoff. By then, it’s too late to start thinking about your marketability.

I recently conducted a poll on Twitter, asking developers about the length of time they experienced between being laid off or a contract ending and finding their next opportunity. As you can see, the majority reported gaps of over one month. In an earlier poll, nearly half of the respondents indicated they had been laid off at some point in their careers. This highlights the critical importance of staying marketable in the industry.

Many of us, myself included, often focus solely on what we need to learn for our current positions. For instance, when cloud computing began gaining traction, I dived into it, presenting at conferences and even considering changing my MVP award to Azure. While I worked on several contracts involving cloud services, most were with AWS, which is more popular in the Western United States than Azure. It’s vital to keep learning for your current role, but it’s equally crucial to develop skills for your next position—even if it means dedicating your own time to learning.

Back in 2010, I noticed programming was becoming increasingly complex, primarily due to the myriad of choices available for application development. This was a significant shift from when I started my career. Creating user interfaces, especially with the rise of web development, became more challenging as new JavaScript libraries were released seemingly every week. It was difficult to keep up. Despite the challenges, I enjoyed creating UIs because I excelled at it and could empathize with end users.

When I began my career, many of us were what we now call “full-stack” developers. However, around 2010, I realized that mastering everything was nearly impossible unless you were a genius. This realization led me to focus more on backend development and architecture—areas where I could excel and provide significant value to the companies I worked for. I didn’t want to be mediocre at anything. In 2020, I wrote an article titled “Rethinking the Full-Stack Developer: Challenges, Realities, and Alternative Perspectives,” where I argued that the full-stack developer is a myth.

After spending a significant amount of time reviewing job postings over the past year, I discovered that I had inadvertently made myself less marketable. Many job postings now seek full-stack developers or what I call the “God Programmer“—candidates who meet an extensive list of requirements that few can realistically fulfill. Unfortunately, many companies fail to understand that the full-stack developer is a myth, continuing to seek candidates who can excel at everything for the lowest possible cost. While this might work for startups, it’s often detrimental to established companies with existing products.

As a contractor, I spend more time examining job postings than most. My advice is to set aside an hour or so each quarter to browse job boards like Indeed and LinkedIn to see what companies are looking for. If you don’t know some of the requirements and aren’t learning them at your job, take the initiative to learn on your own. Plan to acquire these new skills and stick to it. If you learn something new that could benefit your current team, try to incorporate it into your work to gain real-world experience. I discuss more on how to keep up with technology in tip #4.

Every quarter, I post a meme on Twitter that says, “Today is the quarterly ‘Update Your Resume Day.’ Whether you’re working or looking, update that resume to prepare for landing your dream job!” If you follow me on Twitter, when I post this, not only should you update your resume, but also take steps to keep yourself marketable.

Tip #4: The Importance of Personal Projects for Software Engineers

One piece of advice I consistently give software engineers, which I emphasize in my book on interviewing, is to always work on personal projects at home, regardless of your experience level. This sentiment is echoed by others, as Steve Friedl mentions in a tweet, “…you’ll only just muddle along.” Here’s why this is so crucial:

I started working on personal projects even before landing my first software engineering position. The second program I wrote and released garnered a positive review in PC Magazine, which dramatically boosted my sales from about 10 orders a month to 10 a day. These early projects taught me the entire life cycle of releasing an app—from ideation to development, testing, deployment, and customer support. Over thirty years later, I still apply the lessons I learned from those experiences.

These personal projects were instrumental in landing my first software engineering positions. With limited experience, I brought these apps to interviews, demonstrating their functionality and explaining how they worked. This approach was so effective that it led to job offers every single time. I now recommend this strategy to my students at the University of California San Diego to help them secure their first positions. Many students, seeking advice on how to get a job without experience, have found this recommendation invaluable.

For more insights on my early projects, refer to the article “Write Something, Anything to Start and Enhance Your Career“. Additionally, when I faced challenges hiring beginners at a company, I used this technique during interviews, as detailed in my article “Testing Software Engineers During an Interview: There’s a Better Way!

I encourage you to write something—anything! Develop apps for app stores or create open-source libraries for platforms like GitHub and NuGet. However, don’t approach this with the mindset of “getting rich quick.” Instead, focus on gaining valuable experience and let the journey unfold naturally. This approach can lead to a fulfilling and successful career as a software engineer. Moreover, even if it’s not explicitly requested, bring these apps to your next job interview on a thumb drive as tangible evidence of your independent work. If you specialize in front-end development, consider showcasing examples of your work by printing out web pages or application screenshots and compiling them in a presentable leather portfolio.

Tip #3: The Critical Role of Soft Skills in a Software Engineering Career

At this point in my career, I often say, “I have forgotten more than I know.” With the rapid pace of change in programming—which seems to accelerate each year—many languages, frameworks, and technologies become outdated or obsolete. Even .NET versions go out of support more quickly than before, and throughout .NET’s 23-year history, numerous frameworks have vanished.

For as long as I can remember, I’ve recommended that engineers focus on learning skills that endure throughout their careers. These include methodologies like Object-Oriented Programming (OOP), multi-layered applications, design patterns, and, critically, soft skills such as communication, time management, leadership, creativity, and interviewing techniques.

In 2016, I wrote an article titled “Soft Skills – As Important If Not More Important Than Technical Skills at Conferences”, highlighting the scarcity of such sessions at tech conferences. Unfortunately, it’s nearly impossible to get conferences to accept presentations on these topics, and they are seldom taught in schools. For example, when interviewing recent Computer Science graduates, I often find they lack a fundamental understanding of OOP.

Here are a few foundational skills I learned early in my career that I still rely on today:

Software Development Lifecycle (SDLC)

Before becoming a full-time software engineer, I learned about the Software Development Lifecycle (SDLC)—a systematic process that software engineering teams use to design, develop, test, and deploy applications. The SDLC ensures that each phase, including planning, requirements analysis, design, coding, testing, deployment, maintenance, and evaluation, is completed efficiently and effectively.

In the 90s, Microsoft not only taught me what the SDLC is but also how to teach it. I went on to instruct multiple companies and my university classes on its principles. Unfortunately, since Agile methodologies became popular, I’ve noticed a decline in the planning, requirements, and design phases. Many teams jump straight into coding, leading to inevitable code issues and project setbacks. More companies need to learn or improve their implementation of the SDLC to produce better software.

N-Tier Programming

Another skill I apply in every application I write is n-tier programming, also known as multi-tier architecture. This approach divides an application into multiple layers or “tiers,” such as presentation, application, communication, data, and security. In my article “Real World Cloud App – From Start to Finish: The Architecture & Design”, I explain how n-tier architecture promotes separation of concerns, scalability, maintainability, reusability, and flexibility. It allows different developers or teams to work on separate layers independently, enhancing overall productivity and code quality.

Communication Skills

To have a long and rewarding career, engineers must also be effective communicators. This can be challenging for many of us, myself included, as we tend to be introverted and often suffer from imposter syndrome. Early in my career, I was very introverted and dreaded speaking in front of people. To overcome this, I founded and regularly spoke at the user group in San Diego. This forced me to improve my public speaking and interpersonal skills.

Now, while I still consider myself an introvert, I can effectively communicate when needed—whether speaking at a conference or presenting ideas to a CEO. Without strong communication skills, it’s difficult to participate in meetings, articulate your ideas, advocate for raises or new job opportunities, or engage in valuable discussions at conferences.

If you struggle with communication, here are some steps to improve:

  • Practice Public Speaking: Join groups like Toastmasters or present at local meetups to build confidence.
  • Seek Feedback: Ask colleagues or mentors to provide constructive criticism on your communication style.
  • Engage in Active Listening: Improve your ability to understand and respond to others effectively.
  • Take Courses: Enroll in workshops or online courses focused on communication and interpersonal skills.

It’s also important to advocate for these skills to be taught at user groups, conferences, schools, and online training platforms. Integrating soft skills education alongside the latest technical frameworks and languages is crucial for developing well-rounded, effective software engineers.

Tip #2: The Importance of Engaging in Your Local Programming Community

One of the most impactful recommendations I can give is to get involved in your local programming community and beyond. My career has been profoundly shaped by community engagement, as I shared in my article “From Fear to Triumph: My 30-Year Journey in Public Speaking“. Shortly after I became a full-time software engineer, I founded the Visual Basic User Group in San Diego, which later evolved into the San Diego .NET Developer Group when .NET was released. I led this group for most of its 20-year existence, and this involvement opened doors to opportunities I never imagined, including traveling the world to speak at conferences. My first international conference was in Ukraine, an experience that broadened my perspective and deepened my passion for software development.

As I mentioned earlier in this article, participating in these groups is an excellent way to stay up-to-date with the latest programming trends. I highly recommend attending community-run conferences like Code Camp. These conferences are either free or low-cost and usually take place on weekends, so they don’t interfere with work. Volunteering at these events and even speaking at them can be incredibly rewarding. I have a particular fondness for these conferences because they are run by engineers like you and me, not corporations. In fact, I often find a greater variety of sessions at these events, especially at Silicon Valley Code Camp, the largest of its kind in the world.

Unfortunately, many of these community events have dwindled since the COVID-19 pandemic. In San Diego, we no longer have any user groups, and I believe there are a few reasons for this. First, the older engineers who ran these events for years or even decades became burnt out. I, too, experienced burnout during the final years of leading our user group. Second, many younger engineers don’t see the value in these gatherings, particularly with the abundance of online events available. However, I’m here to tell those engineers that the value of attending events in person far exceeds that of online experiences. There’s nothing like listening in person and interacting with other engineers. Online experiences, no matter how well-executed, simply cannot replicate the energy and connection of in-person interactions, as I discussed in my article “Beyond the Screen: The Power and Perks of In-Person Tech Conferences“.

If you’re new to the tech world, I can’t emphasize enough the importance of getting involved in your local programming community. If there isn’t a user group, meetup, or Code Camp in your area, consider starting one! The impact on your career could be as profound as it was for mine.

Inspiration to Get Involved

Getting involved in the community is not just about professional growth; it’s also about personal enrichment. You’ll meet like-minded individuals who share your passion for technology. These connections can lead to lifelong friendships, mentorship opportunities, and collaborations on exciting projects.

Imagine being part of a network where you can exchange ideas, get feedback on your work, and stay motivated by seeing what others are achieving. The inspiration you gain from these interactions can fuel your creativity and drive, making you a better programmer and a more well-rounded individual.

Moreover, community involvement provides a platform to give back. Sharing your knowledge and experiences can help others on their journey, and there’s a unique satisfaction in knowing you’ve contributed to someone else’s success. By speaking at events, volunteering, or organizing meetups, you become a pillar of the community, inspiring the next generation of engineers.

Based on my experience, running the user group and speaking at community conferences have been invaluable for discovering job opportunities. Many engineers and managers attend these events, see me speak, and then invite me to interview for their companies or consulting groups. These events also connect you with recruiters who can help you find your dream job.

Don’t underestimate the power of being part of something bigger than yourself. The sense of belonging and purpose that comes from active community involvement is invaluable. So, take that first step, whether it’s attending a local meetup, volunteering at a conference, or starting your own group. Your future self will thank you.

Beware of Companies That Discourage Community Involvement

While community involvement has been a cornerstone of my career, I’ve encountered some challenges along the way. Unfortunately, during interviews, some companies have viewed my community engagement—especially my conference speaking—as a red flag, leading them to pass on hiring me.

For me, this is a significant red flag about the company, and it heavily influences my decision to proceed with the interview process. A company that discourages community involvement likely doesn’t prioritize your growth or may fear that you’ll outgrow the role and leave. My advice? Never work for a company that sees your desire to contribute to the community as a threat. Instead, keep searching for a place that values your development and encourages you to continue growing both professionally and personally.

Tip #1: The Crucial Role of Financial Planning in Career Longevity

Over the past 30 years, I’ve worked as a full-time employee, and contractor, and have faced layoffs numerous times. My number one tip, however, isn’t directly about software engineering:

Save as much money as possible and invest in property whenever you can!

Financial planning wasn’t taught in schools when I was younger, and I’m not sure if it’s taught today. If it isn’t, it absolutely should be before graduating high school. Perhaps your parents taught you this, but mine didn’t, so I didn’t pass it on to my kids either. If you didn’t learn this skill, consider me your surrogate parent for this tip—please, heed my advice.

In today’s world, you must be prepared for unexpected layoffs, pandemics, temporary disabilities, or even maternity leave. Ageism is a significant challenge in our industry, affecting career advancement, workplace culture, training opportunities, and job security. From personal experience and conversations with friends, I can tell you that finding a new job later in your career can be nearly impossible. Many companies won’t even consider your resume. Because I’m currently dealing with ageism, I can’t offer advice on how to combat it, which is why financial planning is so critically important.

To be honest, I had planned to be retired by now. I wanted to retire or semi-retire by the time I turned 50, but that didn’t happen for various reasons. When my kids were young, I told them to excel in school because I planned to downsize and travel the world at 50. One reason I initially worked for startups was the hope they’d be bought out, giving me a financial windfall, but that didn’t pan out.

I’m not a financial planner, but as soon as you start in this industry, make saving money a priority. When I began, the average starting salary for a software engineer was $40,000 annually; in 2023, it was $81,448, with many starting around $90,000 today. This is an excellent starting salary compared to the average salary across all industries, which is just over $50,000 in America.

I understand that saving money can be challenging, especially if you have or plan to have children. As a father of two, I lived paycheck to paycheck throughout my marriage, particularly as the sole income earner. At one point, before I became a software engineer, I worked two jobs and attended college classes. No matter your situation, you must prioritize saving.

Working from home has saved me a lot of money. I spend very little on fuel, which is also good for the planet. I make all my lunches at home, which saves even more. Even making coffee at home instead of buying it at Starbucks can save over $5 a day! Find ways to save money and put it in high-interest savings accounts.

Living below your means is crucial. One of the best ways to save money is to avoid using credit cards. As a single father, I racked up a lot of debt and eventually had to cut up all my credit cards. Now, I only use debit cards, even when traveling. If I can’t afford it, I don’t do it.

I also recommend finding a good accountant or financial planner to help you, even when you’re just starting out. I did, and in 2000, my advisor told me that based on my income at the time, I should buy property to save on taxes. I’m so glad I listened because that decision has been one of the best I’ve made for my career. Even back then, I sensed a downturn coming, which turned out to be the 2008 financial crisis. So, I chose to purchase a home in an area I believed would be less affected, and I was right. My home never lost value and is now worth more than I ever imagined. Unfortunately, due to my current job situation, I’m in the process of selling my home and plan to move to a more affordable area in the United States.

The importance of saving money and buying property isn’t just about planning for retirement; it’s also about preparing for potential gaps in your income. You never know when you might be laid off or, in extreme cases like the one I experienced, have the bank show up, chain the doors, and give you an hour to vacate the building. You must have savings to handle situations like this. A contractor friend of mine once advised keeping three months of expenses in cash, but these days, six months to a year is more realistic.

No matter where you are in your career, make it a priority to save money, live below your means, and invest in property. For me, real estate has been the best investment, even outperforming stocks and 401(k) accounts.

I’d like to conclude my top tip with a story about someone who began financial planning the right way after graduating college. This person is someone I mentor, and over time, I’ve met her family and we’ve become good friends. At just 23 years old, with advice from her family, she made a remarkable decision: she purchased her first home. She moved her parents, grandparents, and cousin in and when the COVID-19 pandemic hit, she also moved in. In just seven years, the value of her home has nearly doubled! What’s even more impressive is that she has already paid off the mortgage in full and is now in the process of selling it to buy a larger home for herself and her family.

Even before purchasing her home, she had begun investing in stocks and bonds, and today, she has built a robust emergency fund. She shared with me that witnessing her parents struggle financially when she was younger motivated her to work hard to improve life for herself and her family. Although she faced challenges in the beginning, just like many of us, she is now well-prepared for life events such as layoffs or income gaps. I have always been proud of her achievements. In fact, I helped her get into a master’s degree program because I recognized her potential from the moment we met. She is on the right path, and I know she has a long and fulfilling career ahead of her!

Summary

There are many other tips I can share but this article is already long. Two others that are very important for a long happy career are career-life balance, and staying healthy which include keeping weight off and limiting drinking alcohol. If you can, find one or more mentors that can help you have a long career too. After writing this article, I wished I had a time portal, so I could travel back 30 years so I can be better prepared for this part of life and career!

I hope this article and the advice shared in the “Wisdom from the Trenches: Navigating Career Longevity in Software Engineering” episode on Rockin’ the Code World help you prepare for a long and rewarding career as a software engineer. If you’re a beginner, I invite you to comment on this article with topics you’re interested in, so I can write about them in future articles. For experienced engineers, please share your insights on how you’ve prepared for the later stages of your career. Your input can provide valuable guidance to others in the community.

Rockin’ the Code World

Further Reading

Pick up any books by David McCarter by going to Amazon.com: http://bit.ly/RockYourCodeBooks

One-Time
Monthly
Yearly

Make a one-time donation

Make a monthly donation

Make a yearly donation

Choose an amount

$5.00
$15.00
$100.00
$5.00
$15.00
$100.00
$5.00
$15.00
$100.00

Or enter a custom amount

$

Your contribution is appreciated.

Your contribution is appreciated.

Your contribution is appreciated.

DonateDonate monthlyDonate yearly

If you liked this article, please buy David a cup of Coffee by going here: https://www.buymeacoffee.com/dotnetdave

© The information in this article is copywritten and cannot be preproduced in any way without express permission from David McCarter.


Discover more from dotNetTips.com

Subscribe to get the latest posts sent to your email.

One thought on “Surviving and Thriving in Tech: Timeless Advice from Three Decades in Software Engineering

  1. “This title is so intriguing! Gaining timeless advice from three decades of experience in software engineering sounds invaluable. I’m excited to learn practical insights that can help navigate and excel in the ever-evolving tech industry!”

Leave a reply to withu itservice Cancel reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.