[Ed. note: As we gear up for the new year, we’re revisiting some of our most impactful pieces of the year. We hope you enjoy this look back at our top content from 2024, and we look forward to bringing you more insights in 2025.]
I started my tech journey at 19, a college dropout landing in San Francisco. A Unix sysadmin role awaited me at Taos Consulting, but the allure of a city startup pulled me towards software engineering on mail subsystems.
Finding work wasn’t a concern then. Jobs were abundant, and entry barriers were practically nonexistent. Basic HTML skills or command-line familiarity often sufficed to get you hired.
Was I exceptionally gifted, a natural with computers? Not at all. Homeschooled in rural Idaho, I first encountered a computer at sixteen during college. My escape to university was on a classical piano scholarship, later traded for diverse non-technical pursuits: classical languages, music theory, philosophy. My computer knowledge was entirely self-taught, gained through university sysadmin work for various departments.
Looking back, I was incredibly fortunate to enter the industry when I did. It’s unsettling to imagine navigating today’s landscape as a newcomer. The accessible pathways into tech my peers and I utilized have largely disappeared.
The Maturing Software Landscape and the Rise of AI
Like any maturing field, the software industry’s early,Wild West phase—characterized by low stakes, minimal regulation, and evolving standards—was inevitably finite. Consider the trajectories of medicine, cinema, or radio; early phases are remarkably similar across industries.
There’s a golden window in any nascent technology where role boundaries are fluid, and opportunity is ripe for anyone driven, inquisitive, and ready to work hard.
This phase is transient. It must be, and rightly so. The prerequisite knowledge and experience to enter the field steadily increase. Stakes escalate, mission scope expands, and the repercussions of errors amplify. We establish certifications, training programs, standards, and legal frameworks. Debates even emerge about the very definition of “software engineers as true engineers.”
However, alongside this maturation, a new force is reshaping the industry: Artificial Intelligence. And as AI increasingly influences software development, AI career programs for experienced engineers become crucial for navigating this evolving landscape. These programs are not just about keeping up with technology; they are about preparing seasoned professionals to lead in an AI-driven future, and crucially, to mentor the next generation in this new paradigm.
Software Engineering: Still an Apprenticeship, Now with AI
Today, entrusting critical pager rotations to a nineteen-year-old dropout, as I once was, would be unthinkable. The necessary baseline knowledge has grown, the pace is quicker, and the risks are significantly higher. Learning everything on the job, as I did, is no longer feasible.
Yet, formal education alone, even a Computer Science degree, doesn’t fully equip you for the practicalities of a software engineer’s life. CS degrees often lean towards computing research rather than day-to-day engineering. Coding bootcamps, with their focus on problem-solving and modern toolkits, offer a more pragmatic entry. In both cases, you acquire foundational skills—enough to grasp the tools and learn the job itself through practice.
Software engineering remains fundamentally an apprenticeship industry. Books alone can’t make you a software engineer. Learning comes from doing, repeatedly, alongside experienced engineers. This learning is continuous, a lifelong practice necessitated by the industry’s rapid evolution. And now, this apprenticeship model must adapt to incorporate AI. AI career programs for experienced engineers can empower senior professionals to become effective mentors in this new AI-integrated environment, guiding junior engineers not just in traditional software development but also in leveraging AI tools and understanding AI’s impact.
Forging a competent software engineer, what many job ladders term a “senior software engineer,” still requires a solid seven-plus years. This involves years of daily coding, reviewing, and deploying code within a team, mentored by more experienced individuals. This timeframe reflects the depth of practical experience required.
Re-evaluating “Senior Engineer” in the Age of AI
My seven-year timeline for seniority often sparks debate:
“Seven years? I achieved it in two!”
“Senior Software Engineer in under five years here!”
While seven years isn’t a magic number, developing into a seasoned engineer, capable of anchoring a team, takes time and extensive practice.
The term “Senior Software Engineer” often defaults to someone who can ship code and contribute positively to productivity. This is a reductive definition. It wrongly implies junior engineers are productivity liabilities and overlooks the multifaceted nature of software engineering, where coding is just one component.
To me, seniority transcends coding prowess. It’s about understanding, maintaining, explaining, and managing large, live software systems over time. It’s about translating business needs into technical solutions. Much of the work involves crafting and managing complex sociotechnical systems, of which code is just one representation.
A senior engineer in today’s AI-influenced world is someone who has mastered continuous learning, can teach effectively, holds complex system models in their mind, and can maintain, expand, and operate these systems long-term. They possess sound judgment and reliable instincts. And increasingly, this includes understanding how AI tools integrate into these systems. AI career programs for experienced engineers are designed to enhance these very skills – learning, teaching, system understanding – within an AI context, ensuring senior engineers are equipped to lead teams in this new era.
This brings us to the crucial role of AI.
Avoiding the Cannibalization of Our Future Engineering Talent
Landing that first engineering role is incredibly challenging. My sister’s two-year struggle to find a job after graduation, despite excellent grades and hands-on experience, highlighted this starkly a few years ago. Anecdotally, it seems even tougher now.
Recent articles detail AI’s encroachment into entry-level jobs across industries, and some of these concerns are valid. Repetitive tasks like document format conversion, text summarization, or icon replacement are clearly vulnerable to automation. This feels like a natural progression of automation, now extending to textual tasks alongside mathematical ones.
However, some tech executives and thought leaders seem to believe generative AI is poised to replace junior engineers entirely. The narrative of junior engineering work being automated away, diminishing the need for entry-level roles, is gaining traction. This perspective is deeply misguided.
It reveals a fundamental misunderstanding of what engineers actually do. By neglecting to hire and train junior engineers, we are undermining our own future. We must stop this trend. And AI career programs for experienced engineers play a counterintuitive but vital role here. By upskilling experienced engineers, we equip them to mentor and guide junior engineers in an AI-augmented world, ensuring the continued growth of human expertise alongside AI adoption, not replacement.
Code Generation is the Tip of the Iceberg
Many perceive coding as the most demanding aspect of software engineering. This is a misconception. Writing code is the easiest part of software engineering, and it’s becoming progressively simpler. The real challenges lie in operating, understanding, extending, and governing that code throughout its lifecycle.
Junior engineers start by mastering code snippets, functions, and debugging. Progression to seniority involves composing software systems and navigating them through constant change.
Sociotechnical systems comprise software, tools, and people. Understanding them requires familiarity with the interplay of software, users, production, infrastructure, and ongoing evolution. These systems are incredibly complex, prone to chaos, nondeterminism, and emergent behaviors. Claiming complete system comprehension often indicates a lack of awareness of the unknown complexities. In essence, code is manageable; systems are intricate.
Generative AI tools have significantly accelerated code generation. The easier aspects are becoming even more effortless. However, AI has yet to address the complexities of managing, understanding, or operating this code. In many ways, it has amplified these challenges. Therefore, AI career programs for experienced engineers should emphasize not just AI tools, but also the critical skills of system thinking, complexity management, and mentorship – skills that remain paramount even with advanced AI.
The Paradox of AI-Generated Code: Easy to Produce, Hard to Trust
The hype around generative AI might paint a picture of engineers effortlessly prompting ChatGPT or using Copilot to generate vast amounts of code, seamlessly integrating it into projects. This is far from reality.
Tools like Copilot are better viewed as advanced autocomplete or copy-paste functions, perhaps a sophisticated blend of Stack Overflow and Google’s “I’m feeling lucky.” Each use is a gamble.
These tools excel when mirroring existing patterns in the codebase, facilitating copy-pasting with minor adjustments, or in repetitive tasks like test writing with predictable YAML structures.
However, AI-generated code is inherently untrustworthy. This cannot be overstated. While seemingly plausible, even when superficially functional, it rarely aligns perfectly with specific needs. It generates code that fails to parse or compile, fabricates variables, method names, and function calls, and hallucinates non-existent fields. It disregards coding standards and conventions and doesn’t offer intelligent refactoring or abstractions. The more critical or complex the code, the less reliable AI generation becomes.
Time saved on initial typing is often offset by the meticulous line-by-line revision required to ensure correctness and coherence with the codebase. This can be as time-consuming, or even more so, than writing the code manually, especially with today’s intelligent autocomplete features. Integrating AI-generated code can be a substantial effort, often outweighing its benefits.
Generating compilable, executable, and test-passing code is relatively straightforward. The real challenge is crafting a codebase that is navigable, adaptable, and understandable for multiple teams and future generations over years. AI career programs for experienced engineers should therefore focus on these higher-level skills: code maintainability, system design, and team collaboration, ensuring that AI tools are used responsibly and effectively within a broader engineering context.
Practical Applications of Generative AI for Engineers
Despite its limitations, generative AI has valuable applications for working engineers.
For instance, quickly generating example code using unfamiliar APIs through ChatGPT can be more efficient than sifting through API documentation, leveraging AI’s training on real-world API usage.
Generative AI also excels at producing code for tedious but well-defined tasks, effectively automating template-based coding. If code can be generated using sed/awk
or vi
macros, generative AI is likely proficient at it.
It’s also useful for translating code snippets between languages, like converting Python to Java for those unfamiliar with Java.
However, remember the 50/50 rule: AI-generated results may be entirely fabricated. Always verify AI outputs manually. Despite this, these tools undeniably accelerate workflows in numerous ways. AI career programs for experienced engineers should include practical modules on leveraging these AI tools effectively and critically, understanding both their potential and limitations in real-world engineering workflows.
Generative AI: The Eager, Fast-Typing Junior Engineer
Kent Quirk, an engineer I collaborate with, aptly describes generative AI as “an excitable junior engineer who types really fast.” This analogy is insightful.
Like a junior engineer’s output, AI-generated code cannot be directly deployed to production. You remain responsible – legally, ethically, and practically. You must still invest time in understanding, testing, instrumenting, and stylistically adapting it to your codebase, ensuring team comprehension and maintainability.
The analogy holds, but only for disposable, self-contained code, not intended for integration into larger systems or long-term maintenance.
Such scenarios exist in the industry – agencies producing numerous disposable apps for specific campaigns, designed to be abandoned post-launch. However, this represents a minority of software. Durable, long-term code is the norm. Even code intended as disposable often proves otherwise. AI career programs for experienced engineers can help distinguish between appropriate and inappropriate use cases for AI code generation, fostering responsible AI adoption.
Generative AI: Not a Team Member, But a Tool
While AI code generation shares superficial similarities with a junior engineer’s output—unreliable without review—the analogy breaks down in crucial aspects. Adding a human junior engineer to a team is fundamentally different from using AI to generate code. AI-generated code lacks context, iterative learning, and impact on team dynamics.
Code review feedback for a junior engineer is invaluable mentorship, an opportunity to impart hard-earned lessons. The very act of articulating feedback clarifies your own understanding.
Conversely, integrating a junior engineer enriches team dynamics, fostering a culture of questioning, teaching, and continuous learning. This human element is absent with AI. AI career programs for experienced engineers should emphasize the enduring importance of human collaboration, mentorship, and team dynamics in software engineering, even as AI tools become more prevalent.
Investing in junior engineer development yields rapid returns. When hiring, we often overvalue senior engineers and undervalue juniors. Both perspectives are flawed.
Rebalancing Hiring: Valuing Juniors, Recognizing Senior Costs
The assumption that senior engineers are instantly productive while junior hires are a perpetual drain is inaccurate. Much of the work in most teams isn’t inherently complex once broken down. There’s ample opportunity for less experienced engineers to contribute and thrive.
The simplistic accountant’s view – “Why pay $100k for a junior to slow us down when $200k buys a senior to speed things up?” – is fundamentally flawed.
Engineering is an apprenticeship industry. Team productivity, not individual output, is the key metric.
Contribution comes in many forms, and not all correlate directly with seniority. Coding ability is just one facet.
Every new hire, regardless of level, requires onboarding and investment. Senior engineers need time to understand the system, tools, and technologies – typically 6-9 months to ramp up, and about a year to reach full productivity.
Junior engineer onboarding is longer and requires more team investment, but it’s not indefinite. They become net positive contributors within a similar timeframe, 6-12 months, and their growth trajectory is steeper than senior hires. Their contributions often extend beyond just code. AI career programs for experienced engineers can equip senior engineers with mentorship skills to accelerate junior engineer onboarding and development, maximizing team productivity and fostering a positive learning environment.
The Undervalued Value of Intermediate Engineers
Some of the most productive engineers I’ve known are intermediate-level. Not yet burdened by meetings, mentoring, and high-level architecture, they can focus intensely on building. They enter a state of flow, coding prolifically and making remarkable progress.
Intermediate engineers are in a sweet spot – proficient coders still eager to learn system design and management. They are energized, engaged, and find even routine tasks interesting, leading to higher quality work, especially with experienced guidance. Intermediate engineers are invaluable to teams, and the only way to cultivate them is by hiring juniors.
Junior and intermediate engineers also naturally counter over-engineering and premature complexity. Their less comprehensive understanding of potential edge cases promotes simplicity, a critical but often overlooked aspect of software development. AI career programs for experienced engineers can highlight the value of diverse skill levels within teams, emphasizing the unique contributions of junior and intermediate engineers in maintaining code simplicity and preventing over-engineering, even as AI tools offer new capabilities and potential complexities.
Long-Term Imperatives for Hiring Junior Engineers
Almost everyone agrees in principle that hiring junior engineers is beneficial… for someone else. The long-term benefits are well-documented:
- Industry need for senior engineers.
- Necessity of training future seniors.
- Lower cost of junior engineers.
- Potential for increased diversity.
- Enhanced loyalty from trained juniors, reducing job hopping.
- The fundamental need for someone to train them.
However, long-term thinking is often lacking in corporate environments driven by short-term gains. Framing junior hiring as altruistic public service makes it less appealing to companies seeking to externalize costs.
Short-Term, Selfish Reasons to Hire Junior Engineers
Beyond long-term benefits, there are compelling short-term, self-serving reasons for companies to hire junior engineers, benefiting both teams and the bottom line. The key is shifting perspective from individual productivity to team composition.
Hiring isn’t about finding the “best individual,” but about building effective teams. Software ownership rests with the team, not individuals. It’s inherently collaborative.
Focusing solely on “best individuals” would prioritize hiring only the most senior, experienced engineers, mistakenly equating seniority with productivity. Team productivity, however, is paramount.
The most effective teams are diverse in strengths, perspectives, and experience levels. Monoculture teams might excel briefly but lack scalability and adaptability, and diversification becomes harder the longer it’s delayed.
Consistent junior engineer hiring is essential to replenish the talent pipeline. Juniors become intermediates, and intermediates become seniors. Effective mentorship often comes from those just one level ahead, who remember the junior experience vividly. AI career programs for experienced engineers can equip senior and intermediate engineers to become these effective mentors, creating a virtuous cycle of talent development within teams.
Balanced Teams: A Spectrum of Expertise
A healthy team is an ecosystem. You wouldn’t build a product team solely of database experts or senior architects. A balanced team includes a range of skills and experience levels.
Teams exclusively composed of staff or principal engineers are dysfunctional. High-level architecture and planning have limited scope, leading to boredom, over-engineering, and internal competition. Under-documentation and neglect of system simplification are common pathologies.
Homogeneous teams, regardless of level, suffer from contention and blind spots. Work complexity varies, from simple functions to critical architectural decisions. Team composition should reflect this range.
Optimal teams challenge every member, preventing boredom and fostering growth. This balance is achieved through diverse skill levels. AI career programs for experienced engineers can further enhance team balance by providing senior engineers with the skills to delegate effectively, mentor junior team members, and strategically leverage AI tools across different experience levels, ensuring everyone contributes optimally and learns continuously.
The Hiring Bottleneck, Not Training Capacity
The current bottleneck isn’t training junior engineers, nor is it junior engineers needing to “hustle harder.” The bottleneck is securing that crucial first job. Companies often view junior hires as externalizable costs, not investments.
Post-first job, engineers usually find subsequent employment. But landing that initial role is incredibly difficult, especially without top-tier college credentials or Big Tech connections. It’s a gamble, heavily reliant on luck and connections. This was challenging even before the rise of AI-driven automation fears. Now, it’s even more daunting.
Consider where you would be without your early tech opportunity. Many of us would not be where we are today.
While generational critiques like “Ok, Boomer” persist, we must prevent “Ok, Staff Engineer” from becoming a similar indictment of closed opportunity. AI career programs for experienced engineers can play a crucial role in opening up opportunities. By equipping experienced engineers to effectively integrate and mentor junior talent in an AI-augmented environment, these programs can help bridge the gap and create pathways for the next generation to enter and thrive in the tech industry.
Is Junior Hiring Universally Recommended?
No. Successful junior hiring requires specific conditions:
- At least two years of operational runway.
- Teams not constantly in firefighting mode, with slack in the system.
- Experienced and effective managers, or at least some management structure.
- A defined product roadmap.
- Team members willing to mentor and guide junior engineers.
Hiring juniors into a dysfunctional environment is worse than not hiring them at all. While some argue for exceptionally high bars for junior-friendly environments, a less-than-perfect first job is often preferable to no job at all, given the difficulty of breaking into the industry.
Fully distributed companies face additional challenges in junior onboarding. Office environments facilitate faster learning through casual interactions and technical osmosis. Remote employers must compensate for this, perhaps by leveraging AI-powered collaborative tools and structured mentorship programs, potentially informed by AI career programs for experienced engineers, to create effective remote learning environments.
Avoid hiring a single junior engineer initially. Hire in cohorts of two or three to reduce isolation and intimidation.
Engineers Must Lead the Change
Meaningful change in junior hiring will only occur when engineers and engineering managers champion this cause personally.
Successful junior hiring programs often originate from engineers advocating for them. Engineers, sometimes managers, build the case, secure resources, design programs, and mentor junior hires. This is achievable for most motivated, experienced engineers and beneficial for their own career growth. Participating in or advocating for AI career programs for experienced engineers can be a powerful way for senior professionals to contribute to this change, gaining leadership skills and influence while helping to shape the future of the industry.
Finance and executives are unlikely to prioritize this organically. Those viewing engineers as interchangeable resources are less likely to understand the importance of junior talent.
AI will not solve all our problems or automate away the need for human engineers. Even if it could, code generation is a small part of software engineering. Only engineers possess the context and credibility to drive the changes necessary for building great teams and fostering engineering excellence.
Great teams forge great engineers. Engineers and engineering managers understand this best. It’s time for us to advocate for junior engineers and make it happen. Let’s ensure that AI career programs for experienced engineers become a catalyst for this change, empowering experienced professionals to build and lead diverse, thriving teams that include and nurture the next generation of tech talent.