Categories
Tips

Why Finding Programming Jobs is Difficult

A few years ago, I started guest lecturing and volunteering at a few of the coding bootcamps here in Chicago. I had a very non-traditional job search process (more on that in a minute), so it was surprising to me that so many new grads had a tough time finding their first roles.

Since then, I’ve realized that job hunting isn’t just hard for new software developers. There are virtually endless threads on Reddit (1, 2, 3, 4) bemoaning the process and how arbitrarily good programmers are rejected without reason after putting dozens of hours into the process.

In short, it’s demoralizing, but I’ve been on both sides of the table.

In my 12+ years in tech, I’ve been a software developer, an engineering manager, a CTO, and a founder. I’ve been in the hiring seat and the job-seeker’s seat at various times, and like many of you, I think most companies’ hiring systems are deeply flawed.

That said, there are ways to navigate it or work around it entirely. As an applicant, understanding how the system works and playing to your strengths can help make it a lot easier on yourself. So, in this piece, I’ll break down the hiring process from an employer’s perspective. I’ll share some of the reasons this process is so annoying (on both sides) and offer my perspective on how both sides can navigate it.

Why Is Job-Hunting So Difficult for Software Engineers? 

There are a number of factors at play in making job-hunting as hard as it is. Here are just a few factors:

1. Oversupply of Junior-Level Developers

Finding your first role is particularly hard for entry-level programmers, since the vast majority of openings are for mid or senior-engineers with 5+ years of experience. But, employers are somewhat justified because junior developers can be a risky bet.

Hiring a new software developer can cost tens of thousands of dollars. Add to that onboarding and training costs — which are significant for someone who’s completely new to the field — and it’s easy to invest $30,000 or more before they’ve added a line of production code.

Now imagine you make a bad hire.

It takes 8.8 weeks to dismiss someone, does damage to the hiring manager’s reputation, hurts morale, and the company has to recruit for that position all over again. Bad hires mean a lot of money and time is wasted, and most employers are extremely risk-averse (read fearful).

As a result, companies tend to be biased toward experienced candidates who are familiar with the language and frameworks they use. They tend to want proven contributors who are used to working in a professional environment and know all the tools of the trade.

I’m not saying this is right, but this is the economic case that any junior applicant is fighting against.

2. Outdated Hiring Practices

A lot of the frustration also stems from the fact that many steps in the process are not relevant to the actual job. Instead of testing for skills and knowledge applicable to their day-to-day work, applicants are made to jump through arbitrary hoops that often leave non-traditional and diverse candidates struggling.

> “But honestly, as an ACTUAL senior software developer, why do I have to brush up on things that don’t come up in the day to day often?” – Anonymous

Applicant Tracking Systems

For starters, ATSs, which are meant to help facilitate the hiring process and save everyone time, can be a huge barrier. Job seekers have to upload their resume and then fill out the exact same information all over again in most ATSs.

What’s more, many recruiters use these systems blindly.

Most ATSs will parse an application for keywords to determine if a candidate is qualified. If somebody wrote into their application that they’ve used Scala before, but they didn’t explicitly write that they’ve used Java, the ATS might tell the recruiter that they don’t know Java. A real engineer would know that the are closely related enough to be interchangeable in many environments, but naive recruiters may not.

This leads candidates to use hacks like (Amit Juneja’s here) to manipulate ATSs to get more positive replies.

While employers might save time using these tools, they’re clearly missing good candidates who just don’t know (or care) enough to game the system correctly.

Whiteboarding Sessions

Termed “whiteboard algorithm hazing” by David Heinemeier Hansson, the creator of Ruby on Rails, whiteboarding is one of the most aggravating experiences for job seekers.

This interview style, which is widely used by tech companies like Google, Facebook, and Amazon, asks candidates to spontaneously regurgitate any one of hundreds of algorithms that were last useful maybe 50 years ago. They’re asked to write out these algorithms on a whiteboard with no access to an IDE or any reference material.

Spoiler alert: this is nothing like the work that real programmers do.

In the job, they’ll get to work on their own computer using reference materials and all sorts of assistive devices. I’d argue that it’s more important that developers know how to actually look things up quickly on Stack Overflow than repeat algorithms by memory, but that’s just me.

Hanssen says as much in his blog: “I’ve known fabulous programmers flame out in the quizzing cage and terrible ones excel. So unless you’re specifically hiring someone to design you the next sorting algorithm, making them do so on the white board is a poor gauge of future success.”

So why do companies default to this method of weeding out applicants?

Some of it is laziness. Many managers do whatever the policy dictates rather than improve the policy. For others, it’s likely a form of elitism or bias. Many companies want to limit their applicant pool to people with more traditional computer science backgrounds rather than those with self-taught or bootcamp experience.

In any case, whiteboarding has forced many applicants to spend months brushing up on arcane programs like maze solving algorithms or the longest possible Collatz sequence, hoping that they get tested on one of those during their interview.

It has also spawned an entire industry of Online Judges — platforms where applicants can solve problems and spend time on coding exercises. LeetCode, HackerRank, and CodeForces are some of the most popular ones out there. It’s a lot like SAT prep for a job, except that you have to go through it again every time you want to change your job.

3. Job-Skills Mismatches

Finally, I see many developers struggling in the job market because they don’t have the right skills. This problem affects new and experienced developers.

For example, if you’re a senior developer who’s built a career working in PHP, but all the best companies are looking for Python or Golang developers, you’re going to have a hard time getting offers.

This goes back to point 1, but companies don’t want to spend money and time cross-training new hires. It’s expensive and risky, so they favor candidates who already have the skills they think their job needs.

The problem is that for many developers with a full-time job, family, and other commitments, it’s very hard to spend time learning a new programming language on the side. Keeping up with all the new technologies in this industry is one of the most common challenges of working in this industry.

So How Do I Get Hired? 

While there are movements being made against some of these arbitrary recruitment practices, many big companies have stuck with them. So in the meantime, how do you get hired and not get discouraged throughout the job hunt?

Here are a few pointers from my experience as a job seeker as well as conversations with fellow engineering managers:

1. Network, Network, Network

If you want to avoid the black hole of online applications, you need to build a network and reach out to people. I spend between four to eight hours every week building and maintaining my network.

Networking got me my first job right out of college and every subsequent job I’ve had since then. 

I started attending conferences and meetups very early in my career. As I began making connections, people started inviting me to speak at meetups and bootcamps, even though I was relatively early in my career.

I even kept track of all the people I met and got in the habit of reaching out to reconnect with them periodically. These efforts helped me avoid much of the chaos of traditional recruitment throughout my career. 

In a recent podcast on this topic I recorded with Taylor Dorsett, Software Engineer at Home Chef, he recommended treating each meeting as a learning process, especially when you’re young. “Can I learn something from this interview? Even if I fail at the coding problem, can I connect with this individual and learn something? [Through this] I actually had really good conversations with people and interacted a lot more afterwards.”

This mirrors my own experience. Even if the people I met weren’t looking to hire at the time, I stayed in touch. When they were hiring, I was the first person they thought of.

Whether you’re an entry-level programmer trying to get a foot in the door or an experienced one trying to find the right role, networking will make it a lot easier on you.

2. Contribute to Open-Source Projects

Another way you can distinguish yourself as a candidate is to get involved in a larger, existing project. There are plenty of open-source projects you can contribute to, and you don’t have to make major updates to help. Even bug fixes and documentation updates are valuable contributions!

As an employer, this practice shows me that you can learn an existing codebase, interact with others remotely, and think critically enough to make updates. Greenfield projects are rare in the real world, so showing that you can play well with an existing codebase is a huge asset.

3. Practice Intentionally

If you want to get hired, you have two options:

One: you can limit your search to companies which don’t have annoyingly arbitrary interview practices. Four Square, for instance, has ditched whiteboard interviews in favor of assignments you can take home. Pivotal Labs offers an engaging paired-programming interview style. Networking can help you connect with managers at a number of these companies, but believe me, there are plenty of them out there.

Two: you can spend a couple of hours every week practicing coding interviews. Doing LeetCode exercises is a grind, but you will get better at them over time. Platforms like AlgoMonster and Educative can also help you learn in a more structured way by understanding the patterns rather than memorizing the answers.

You can also practice with mock interviews. I haven’t used it, but Interviewing.io is a well-respected resource where you can anonymously practice interviews with Facebook and Google engineers.

4. Share What You Know

Finally, if you’re looking to stand out from other candidates and have more opportunities come to you, educating others is a great option.

Writing tutorials, recording YouTube videos, or creating an online course is a great way to build your personal brand and prove that you’re worth hiring. I wrote regularly my whole career as an engineer, and many of the blog posts I wrote led to job offers, consulting work, or new connections. Honestly, it’s why I still write pieces like this one, and it led me to create my current company, Draft.dev.

Sharing your knowledge is a great way to help others while showcasing your skills and building an online presence.

Conclusion

The software development field is still growing exponentially and there’s a significant shortage of qualified talent in the space. 

While job hunting can be a huge pain, this is still a good field to be in. But if you’re picky, you may just have to fight a little longer to find that perfect role. Meeting new people and building a body of work you can showcase is a tried-and-tested hack to stand out as a candidate. 

If you found this article helpful or have thoughts of your own, I’d love to hear them. Leave a comment or find me on Twitter to continue the conversation.

Categories
Community

Writing: Software Development’s Underrated Skill

In college, as I was finishing up my engineering degree, I roomed with a bunch of English majors. Every now and then, we’d get together with friends and have short-story writing competitions. Admittedly, not the coolest way to spend a Friday night, but it unlocked my love of writing.

Looking back on my career as a software engineer, manager, and CTO, that time I spent writing was actually one of the most impactful of my college career. Besides helping me as I started Draft.dev, writing contributed to my growth as a developer, leader, and professional.

In this article, I’m going to expand on why writing is such a complementary skill for a software developer and the many ways this skill can benefit your career. I’ll also share some pointers to help you get started as a technical writer and improve your skills.

You Write More Than You Think You Do

“Once somebody hits a minimum threshold of technical skill to hold a job in the industry, about 80% of their ability to succeed in software development is determined by their communication and people skills, not their technical abilities”Ben McCormick, Engineering Manager at Meta

Software development is typically associated with skills like coding, analytical thinking, math, and problem solving. However, equally important is effective communication.

Joel Spolsky, Co-founder of StackOverflow, concurs with this and even goes so far as to say that he wouldn’t hire a programmer unless they can write well:

“The difference between a tolerable programmer and a great programmer is not how many programming languages they know…It’s whether they can communicate their ideas…By writing clear comments and technical specs, they let other programmers understand their code, which means other programmers can use and work with their code instead of rewriting it. Absent this, their code is worthless.”

Spolsky makes a good point, because whether you realize it or not, you’re doing a lot of writing over the course of your day as an engineer. This includes, but isn’t limited to:

  • Commenting on code
  • Collaborating with colleagues and clients on Slack and email
  • Writing bug reports and code reviews
  • Posting and answering questions on community forums
  • Creating technical documentation

Jon Leydens puts it this way in an IEEE article:

“In their first few years on the job, engineers spend roughly 30% of their workday writing, while engineers in middle management write for 50% to 70% of their day; those in senior management reportedly spend over 70% and as much as 95% of their day writing.”

In fact, communication is the primary skill employers are looking for now that remote work is here to stay. By ignoring it, you’re limiting your utility at your current job as well as your future career prospects.

How Writing Can Level Up Your Career

Initially, I mostly wrote for fun and to see if I could get some passive income going on the side. None of my early attempts took off. But they did give me deep insight into the value of technical content as well as lots of practice in creating that kind of content

Come 2020, the pandemic struck and the company I was with at the time hit a rough patch. I was trying to figure out what I wanted to do next and I realized writing full-time was a real option. This led to the founding of Draft.dev.

Since then, it’s been a pleasure to see what a difference writing has made, not just for our clients, but also the engineers who write for us, both financially and professionally. Provided you stick with it, writing can help you level up your career too.

  1. Writing Establishes You As a Subject-matter Authority

One of the immutables of life as a developer is that we’re constantly learning. A recent StackOverflow survey found that nearly 75% of developers learn a new technology or framework every few months or once a year. 

Writing is a great way to reinforce your learnings and document your experiments with a new tool. It can help improve your critical thinking abilities and integrate prior knowledge with new concepts. 

What’s more, your observations can help other engineers learn as well. With remote work as prevalent as it is, junior developers don’t get as much face time with their managers and existing use cases and tutorials can help them get up to speed with their work.

Writing can also help you improve your ability to clarify complex topics to non-technical stakeholders and create better alignment between product and business teams. 

In fact, the more you write, the more you build and exert influence, directly accelerating your career trajectory.

  1. Writing Can Help You Find the Job You’ve Always Wanted

Job-hunting in software development can be an aggravating process, especially for newcomers. 

Writing can help you bypass the traditional recruitment system by putting yourself out there. A well-written tutorial is social proof of the fact that you understand a tool or framework well enough to implement it. After all, claiming you know React in your resume is one thing. Publishing a tutorial where you’ve integrated it with other libraries to build a working prototype is another altogether.

Recruiters or engineering managers who spot your work will be tempted to reach out to you directly instead of wading through a hundred other applications. I did the same thing when I was an engineering manager, and others I talked to have confirmed this.

“I once got a full-time offer to join a cloud computing startup as a copywriter on the strength of a few blog posts I’d written,” says Stephanie Morillo, a content strategist and technical program manager. “I was offered a role as a part-time technical writer for an open-source organization, and I even started doing freelance copywriting on the side for [software development] agencies”

Adam DuVander, Founder of EveryDeveloper, goes even further, “I owe my entire career to a couple of articles I wrote…A tutorial I wrote on Webmonkey led to my first developer job. They saw how I discussed the technology and knew before we even chatted that I could handle the work.”

  1. Writing Can Be a Lucrative Side Hustle

Engineering salaries can differ widely based on everything from the language and frameworks you specialize in to where you’re located.

According to StackOverflow’s 2021 Developer Survey, Clojure developers enjoy a median salary of $95,000, compared to PHP developers who make just $38,916.

The average salary for a full stack developer in the U.S. is $101,402 plus yearly cash bonuses of $5,500, whereas it’s around $58,000 for one in Germany and approximately $9,767 for one in India.

Writing can provide supplemental income and help you bridge this pay gap by utilizing existing skills and knowledge. Draft.dev, for instance, offers you a chance to do just that. So far, we’ve paid over $600,000 to writers in over 64 countries in the two years we’ve been operating.

  1. Writing Can Lead to Public Speaking and Book Authorship Opportunities

Around 2017, I was writing a lot about using PHP with Docker. While I wasn’t able to monetize the site directly, it did lead to a short, self-published book on the subject that was downloaded by over 1,000 developers. 

It also led to a host of conference speaking opportunities and consultancy offers. I wasn’t necessarily an expert on the subject, but I was one of very few people publishing any material on it and so my work stood out.

James Hickey, Principal Engineer at SAVVY, had a similar experience, “I have had many people reach out to me about doing contract work simply by reading my blog and had many offers to write books in the last couple of years.”

Morillo adds, “I wrote a few articles about tech culture in the mid-2010s and was able to secure conference speaking engagements from them.”

Authorship and speaking also tend to bring you more exposure, which leads to similar opportunities in the future, creating a flywheel for yourself.

Improving Your Skill As a Writer

“I have never considered myself expressive or eloquent, so I used to doubt that I would make a good technical writer…However, the truth is that writing, like every other skill, can be learned and developed through practice.”Linda Ikechukwu, Technical Writer and Developer Advocate at Smallstep

New writers frequently experience the resistance that accompanies all creative endeavors. The only way past this is to have a plan and keep at it. Here are a few tips I’ve found helpful over the years: 

  1. Start With Something Familiar

The first block new writers tend to face is what to write about. It’s easy to get caught up between something that’s easy to write and something that you believe is more interesting for readers. My advice? Go with the former.

Eze Sunday, Software Developer and Technical Writer, echoes this sentiment, “Start writing about the things you currently know and share them with the community. You’ll be surprised how many lives you’ll impact.”

Pick a problem you just solved or a tool you just tried out and write about it, even if it feels like something trivial. Just the act of putting some words to paper can tell you something about your writing style and the unique perspective you have to offer.

  1. Aim for Quality

Quality trumps quantity every time. It’s much better to write a few outstanding articles than to write a bunch of average ones.

Be selective about your topics and go deep when you find one you really like. Some of my most popular blog posts are the ones that delved deep into a subject, like this 4,500-word guide to API development.  

Alternatively, write more often, but keep it short and interesting. David Heinemeier Hansson, creator of Ruby on Rails, Founder of Basecamp, and a prolific writer over the years, used to employ this method a lot (and still does), almost as if he wants to cut short an article before it loses value for the reader. Doing this may also help you get more practice without feeling pressured to write huge articles.

  1. Write Regularly

On the flip side, don’t get so caught up with perfection that you neglect to publish regularly.

Frequent practice keeps your skills sharp and gives you a constant flow of feedback from your readers. Personally, I like to block four to eight hours of focussed writing time on my calendar each week. 

A few other writers I’ve spoken to like to use timeboxes throughout the day to churn out productive content. Choose whatever method works for you, but ensure you’ve set aside some time to write regularly.

  1. Keep Your Goals in Mind

Finally, keep moving towards something. Whether you’re looking to monetize a blog, capture a niche, or just record your own learnings, keep that plan in mind as you work on your articles.

And be honest with yourself. As DuVander points out, “Decide whether it’s a side thing or a main thing. You can make either work, but you’ll want to set your expectations appropriately…There are a lot of ways to use writing in an engineering career.”

Track progress towards your goal with readership metrics. You can do this by creating a newsletter that readers can sign up for, running analytics on your website, and paying attention to comments and feedback.

Conclusion

Many software developers ignore communication skills at their own detriment. I hope some of the data and experiences here offer proof of this, but if you’re afraid to start or don’t think you’re very good, don’t worry. As with anything else, the more you write the better you’ll get at it. 

If you’re a developer or an aspiring technical writer looking to start contributing professionally, consider writing for us at Draft.dev. We’re always looking for more writers and we’re open to people of all experience levels!

Finally, I’d love to hear some of your thoughts on writing as an engineer and what it takes to be a better writer. Leave a comment below or connect with me on Twitter.