Why Do Software Developers Quit Jobs?

Endless opportunities await software developers.

Software development is one of the sexiest professions out there. This is driven by a multitude of factors:

  • Tens of thousands of available jobs for developers.
  • Aggressive hiring processes by fast-growing companies.
  • Notably higher salaries than most other jobs out there.
  • Comfortable working environments (neat office jobs compared to selling newspapers behind a stand in the winter).
  • Additional perks offered by many companies (free food or snacks, transport cards or vouchers for cabs/Uber, etc.)
  • Remote working opportunities.
  • Different types of jobs across almost all industries.
  • Career growth opportunities horizontally (other IT jobs) and vertically (team lead, project manager, VP of Engineering).
  • An easy way to bootstrap a separate venture – a lifestyle business or a pet project that evolves into a legitimate business.
  • Consulting jobs, freelance opportunities, half-time gigs, variable work shifts at times.
  • Digital work with 24/7 access online which easily opens other opportunities through social media, job sites, forums.

All things considered, software developers are not forced to stay at a job if they don’t like it, so they quit.

They can usually afford the luxury to quit a job and get employed within a couple of weeks – considering that they have a few years of practical experience on the job.

Or join a start-up as a technical co-founder.

Or jump to freelancing (or become digital nomads).

Or switch to consulting whereas they charge a lot for a few hours a week (and spend the rest of the time on R&D, speaking gigs, or even chilling).

I posted a couple of job posts on LinkedIn years ago – one for a developer and one for a marketing expert. We received 106 applications from marketers and ONE application for development.

It’s especially tricky with new hires. Landing a junior job is extremely challenging – which is why most juniors start whenever they can. This is usually a small firm that can’t afford great talent and needs any help they could find. It’s often related to non-ideal work culture (or tech opportunities) and lower salary (since juniors are generally paid to learn).

Tenure is often related to how quick juniors can find the next job at another company for more cash.

This may result in 3–4 job-hops over the next few years. Some people may want to experiment in small teams, large corporations, startups – and see what works for them.

My personal experience is that it gets a bit more regulated for seniors. Expert developers have usually switched a few jobs and have a decent idea of what would their next step be.

They have a long list of requirements but they are not as inclined to switch jobs as often (since the onboarding in a new job is generally not a pleasant process if you’re already experienced and have gained some reputation in the previous job).

The family also plays a significant role. Junior developers may be 18–24, still young, building the foundations of their career. Seniors over 30 are often married, with children, settled down, and looking for a stable job (that could pay mortgages and anything else in-between).

For the time being, there are more open jobs for developers than existing (and somewhat capable) developers. In 10 or 20 years from now, things could be different. But keeping a developer employed is not trivial as recruiters on LinkedIn blast hundreds of employed engineers monthly, trying to land an interview for a lucrative position.

Why Is the Salary of Programmers Very High?

The fact that you can learn programming for free doesn’t mean that people are determined to put the time and effort in order to become good at what they do and end up earning a big salary.

As a matter of fact, I’ve been involved with several universities, academies, and schools as a seasoned trainer – some being private and charging a solid amount of money, others – completely free. A careful analysis of the dedication and commitment by students may reveal some psychological phenomena – such as generating better results when paying the salary of programmers as you don’t take that for granted.

Since we’ve been hiring several people lately, I heard from a dozen people who have started studying programming 5, 7, or 8 years ago and still can’t cover our junior test assignments. They went to a few courses, probably passed some exams, but finally put everything on hold.

The demand for software engineers (and IT specialists in general) is spectacular. According to the European Commission:

“Europe could face a shortage of up to 900,000 skilled ICT workers by 2020”.

Note the careful mention of “skilled” following the number.

There are well over 50,000 educational institutions worldwide teaching programming – universities, specialized high schools, training academies, and the like. That shortage of IT workers can easily be covered after a single year of professional training given all candidates joining an IT specialty every year.

The caveat is the effectiveness of a training program and the motivation of the trainees. The productivity and efficiency of applicants increase exponentially in several steps – an inexperienced graduate may work a full month on a rookie assignment which takes two weeks for a junior, a week by a mid-level expert, and a day by a senior.

This productivity factor leads to faster delivery of projects, solving emergencies immediately, and taking care of every other aspect related to security, stability, speed for a project.

The vast majority of successful businesses are now online, and they need a professionally established online presence, automation tools, data analysis platforms, internal applications, and so forth. Given the importance of these and the overall demand (as compared to the lack of talented workforce), employers compete for a smaller pool of experts, hence the higher salary of programmers.

What Is It Like to Be an On-Call Software Engineer?

Organizations define “on-call” differently, based on:

  • Their business model
  • The volume and frequency of emergencies
  • The size of their team
  • The importance of reacting quickly

I’ve been on call in most companies I’ve worked for, and this is the case in DevriX at the moment.

One of them employed shifts. There was some regularity (i.e. one or two days of extra attention or overtime across the week). And some unpredictability (last-minute deployments or emergencies).

Most of the other companies delegated important activities to people who can deliver. Therefore, being an on-call software engineer usually meant evening overtime or occasional availability over the weekend after major deployments.

I’ve worked in both service- and product-facing companies.

With service-based practicing, agile regular deployments are common, and working on production projects was the norm. It is slightly different from long-term waterfall gigs that tend to be less stressful after hours.

Tackling maintenance can be really nasty, especially around the holidays, whenever a 3rd party vendor updates their API silently, or a hosting provider decides to update their hardware infrastructure “just because”.

Product-based, we used to help with 2nd and 3rd level support as needed, especially for vital issues that we’ve missed previously.

“Are you open to taking later shifts as needed or be reachable in the event of an emergency?”

It’s literally one of the first questions I ask during an interview. It’s extremely common in some companies and scarce in others.

And it’s not necessarily a bad practice. But some developers are comfortable jumping in as needed while others are really protective of their spare time.

Why Do Most Applicants In Software Development Jobs Never Get A Response?

Make sure that you’re not making any of the 101 mistakes most applicants in software development jobs commit so they usually end up with no responses.

The problem with your career so far could be that freelancing may be beneficial to your future professional development but there’s often no direct way to showcase it.

In other words, everyone can claim that they are a freelancer. You could have built a static HTML page for a friend 10 years ago and enlisted “freelancing” as a core skill that you’ve been proficient in over the past 10 years.

Also, there’s little to none quality control in freelancing – especially with small businesses that don’t have technical teams, processes, quality requirements, QAs and so forth.

Checking Your Portfolio

Or, for the most part, your portfolio is most likely private (unable to enlist your paid gigs), or not visible (back-end development, server development or anything else that doesn’t showcase your skills). Unless you’ve invested some time in building an open-source portfolio on GitHub, you may seem to look the same way as someone who has just started last week.

That’s especially valid in the “website building” field since quite a lot of site builders specialize in installing WordPress with a premium theme and a bunch of plugins in a matter of 2–4 hours and apply with a long list of dozens of “projects” they have “built”.

On top of that, 2 years aren’t a lot of time. If you haven’t had professional experience in a larger company (or with higher scale clients), you may have inherited a lot of bad practices that are harder to unlearn as compared to learning the ropes from the ground. You may as well be asking for a higher salary than an intern or an entry-level applicant.

Different strategies could be implemented depending on your niche and experience so far. Building an open-source portfolio and a bunch of pet projects is certainly a good start.

Trying to connect with people within a company at conferences or online (instead of directly through the official application form) may work better and give you some feedback accordingly. Assessing your skills against an intern or an entry-level applicant would also be helpful.

Consider what experience have you gained during your freelance career. Focus on that in your resume and try to populate your portfolio with items that showcase your experience in detail.

Write a cover letter for each application and tailor it to the company. Make your application process more unique and genuine, far from the shotgun approach.

More Resources

I’ve described some of the steps for internship applications but they may be handy in your case as well:  5 Crucial Career Stages: From Looking For An Internship To Career Growth.

Also, I love this lengthy story from an English major and former professional poker player who has landed a bunch of invitations by Google, Uber, Yelp, and joined Airbnb at the end. There’s a lot you can learn and implement in your next applications:

How to Break Into the Tech Industry—a Guide to Job Hunting and Tech Interviews

What Are The Most Important Programming Skills?

The most important programming skills are the so-called “meta-skills”.

Programming is often not about the coding itself, but instead:

  • The ability to build a mental model of the core problem.
  • Understanding business requirements.
  • Mapping the known components into a chain of events or a story that works together.
  • Receiving all requirements and dependencies early on before hitting a blocker.
  • The skill of debugging all sorts of problems (from an analytical and technical standpoint).
  • The process of learning new skills, technologies, libraries, frameworks, patterns.

Beginner programmers often get stuck on specific problems and tasks. They look for a solution to a very limited problem that cannot be easily applied to other tasks and bug requests.

This leads to an endless learning cycle.

The better alternative is extrapolating that to a higher level – thus learning the core idea of a solution, platform, framework, module, and solving the problem once the “bigger picture” is clear.

This is why the “hacks” that most senior developers use are related to those “meta-skills” and not actually coding faster or formatting code better or other programming skills.

Advanced PHP Tutorials For Developers With 2 Years Of Experience

Advanced PHP tutorials

Do you want to get access to advanced PHP tutorials? What do you want to profile in over the next few years?

The first two years of PHP development have already taught you the basics of web development with PHP. This includes syntax, basic problem-solving, tackling specific issues with programming code, probably general debugging principles and the like.

If you haven’t been exposed to other programming languages and paradigms previously, it will be a good idea to expand on best practices applicable to all sorts of web projects. Mukesh Chapagain has already mentioned design patterns – which are important for building the right project architecture for larger platforms.

Performance and security are two interesting areas to tackle. This may lead to consulting services or specialization in any of those areas in the long run.

Learning a couple more frameworks – or even web programming languages – may be a good side activity to get involved with. Laravel, Symfony, Zend Framework have innovated a lot in the PHP space. You can learn a lot about modular development, ORM for database management, migration schemas, different MVC techniques for problem-solving, lazy model loading and more.

You can also profile in DBA work or expand your knowledge in JavaScript – either Node.js or React/Vue/Angular. This would give you more opportunities for project design and architecture and empower you to build more complicated web services or SPA applications.

In other words, there aren’t specific “advanced PHP tutorials” since you already cover the basics and can handle general development work. You need to push forward, take on more complex challenges and expand your area of expertise across other areas of the stack (which may very well include server administration or DevOps, among others).

Who Can Develop Something Like Quora?

In a nutshell, Quora isn’t a complex application (purely speaking of its feature set). Building a pet Quora “clone” at home is possible in the sense of creating an app supporting:

  • User sign-ups and profiles (including messages)
  • Topics
  • Questions
  • Answers
  • Comments
  • Blog (an incredibly simple one)
  • Activities with questions and users – following, blocking, etc.
  • Keeping stats for views, edit log.
  • Content and profile feeds

You can expand on that and add some of the recently introduced features (like Links), additional interactions between users and questions/answers (like “Answer later”, “Request an answer”, “Bookmark”) – and it’s still technically feasible.

develop Quora
Screenshot from Quora homepage

What Makes Quora Challenging from a Technical Standpoint?

Handling massive volumes of data and traffic. Quora serves about 200,000,000 monthly users browsing across hundreds of thousands of topics and tons of questions and answers (probably in the billions).

Being able to search/update and render the corresponding resources, within a few seconds, for tens of thousands of concurrent visitors at a time requires not only an expensive and rock-solid server infrastructure, but a collaborative effort in scalability from an engineering standpoint.

Relevant content. Most people hang out on Quora because of its home feed, the email digest, and the top answers across each and every topic. Questions containing dozens or 100+ answers are also structured in a sensible manner thanks to an algorithm sorting the answers based on different criteria (number of views, upvotes, previous activity from the author in this topic and many more).

Machine learning is the main engine that runs that powerhouse. Merely listing “the latest answers/questions” will be a hit-and-miss game. The majority of the users will abandon the platform if it gets extremely hard to find valuable content or answers relevant to their favorite topics.

How About From A Business Standpoint?

From a business standpoint, the traffic and user base is also relevant to Adam D’Angelo’s background (a former CTO of Facebook), the prominent presence of the core team in the Bay Area, and the lack of a relevant and serious Q&A platform (compared to Yahoo Answers and other alternatives).

The media team is immensely helpful from a promotional standpoint, feeding popular outlets with high quality content and additionally boosting the platform’s presence on an ongoing basis.

If you want to build the core feature set of Quora, you can probably do it yourself. But that won’t scale past a certain volume of traffic or data and won’t provide the same feed quality (which is constantly calibrated thanks to users downvoting and upvoting questions and answers).

The same thing goes for the most popular platforms out there – Facebook, Uber, Airbnb, Instagram – a handful of them haven’t anything “groundbreaking” other than AI. Furthermore, scaling massive platforms certainly requires a large team of highly experienced engineers.

How To Become An Efficient Full-Stack Developer

full stack developer

It takes over a decade of building back-end systems, configuring server environments, altering front-end layers for different browsers and operating systems, applying design patterns, and dabbling with the latest trends in software engineering (big data, machine learning, embedded development, whatever comes in).

It’s a poor action plan to start with.

Full-stack developers are programmers who mastered a skill and gradually moved to other areas in software engineering. By “moved” I mean a long transition phase of handling small bits and pieces first, owning small components, taking on larger ones over time.

Pick one area of expertise in software development. Study it.

Apply your knowledge at work — as best as you can.

Talk to your colleagues. Let them know what you’ve found and what your assumptions are.

Slowly get to the point where you can effectively debug and stipulate what are the best practices.

You’ll be wrong more often than not. But that’s fine — you can monitor commits and reverse-engineers the reason for taking a certain approach instead of what you read.

Over time, you’ll get more confident and nail more of the problems right away. If your organization is comfortable with assigning you small fixes and change requests, take on the opportunity and keep learning.

Otherwise, you may consider another job. Before you quit, make sure you’ve built a portfolio of at least a couple of practical applications that showcase your skills.

The market for junior developers has stagnated. It’s not easy to land a job without the right tech skills in place. If you can comfortably build a moderately complex project, give it a shot. Otherwise, get back to the drawing board, keep learning, keep practicing, and you’ll get there.

But becoming a full-stack developer? This will take a decade. At least.

How Do Companies Like Facebook Keep Their Software Engineers In Check

Facebook

Facebook employs over 10,000 engineers.

Deploying anything to production isn’t as simple as a rogue engineer secretly hacking something in or out leading to billions of people rendering the end result.

  • Lots of people monitor the code base (since they work on it). You have to familiarize yourself with the flow and the ongoing changes to avoid an unexpected regression you would cause due to parallel changes elsewhere.
  • All changes get QA’d heavily, both via tons of automated tests verifying the core features and a bunch of manual QAs.
  • Code reviews are a standard procedure before deployments (in most companies). Certain folks vet the code base regularly.
  • Changes aren’t rolled over everywhere at the same time at scale. It’s somewhat gradual, starting with test instances to “beta” groups to other small chunks until everyone is migrated.

Basically, you need to organize a sophisticated black operation of multiple people in different seniority working together to cover for a flaw, able to disappear immediately after before the law enforcement gets to them.

This is hard to do (considering recruitment background checks etc), not guaranteed (rotations around people who do reviews or tests), and severely expensive. And even if successfully deployed, version control would allow for reverting this within hours, if not minutes.

Competitive Programming vs. Paid Programming Jobs

software development projects

Competitive programming is fun, and could be applied in certain scenarios — mostly in large tech companies building compilers, dealing with humongous databases and analytics programs, dabbling into compression techniques, encryption, and the like.

The vast majority of companies employing developers build projects solving business problems.

It’s a different mindset. In competitive programming, it’s about optimal routes, the complexity of search and sorting, and a bunch of algorithms that get the job done.

Nature of Software Development Projects in Companies

In real-world software development (the majority of the companies):

  1. Your job is constrained in time. You need to deliver, and quality is important, but the completion time is what earns your paycheck.
  2. A team of people works on a project, including designers, QA, PM, and other roles. It’s a collaborative effort, differently from solving an isolated problem yourself.
  3. A business-driven solution relies on context. The fastest solution isn’t always the best one. UI matters. Documentation matters. Code quality is what will help the project survive through the years.
  4. There are different groups of projects, with their own paradigms and best practices. RESTful applications, web software, SaaS solutions. Once you build one or two, you get the gist of the important components you’ll need to develop, how they play together, common security or performance caveats, commonly used libraries that get the job done.
  5. Speaking of libraries, most problems are already solved within frameworks and libraries. You won’t have to build your own data structures or wrappers around simple data types. And performance execution is often a second-class citizen in many cases.

This is why recruiters often look for specific technical stacks, previous employers, portfolio. Overlap with the software stack is an added benefit, and having solved business problems with code in a team environment is an important addition to the set of qualifications.

Your best bet is building a couple of projects yourself.

If you want to work as a web developer, study a web framework in your preferred language. Build the database layer. Scaffold (or better design yourself) the object-relational mapping. Implement MVC with its own corresponding specifics. Dab into some JavaScript for better usability, AJAX interactions on the front-end, seamless transition between screens.

For mobile development, study Java or Kotlin for Android, or Swift/Objective-C for iOS. Take a look at some of the popular apps out there. Try to replicate them with your own framework. Study the different controls, session and memory management, and cross-device compatibility.

Same rules apply for every vertical. Gain some experience there and apply for a relevant job with your portfolio.