The Five Things Software Engineers Hate About Their Jobs
…and what you can do about it.
I am absurdly interested in how organizations with a big software engineering base can grow better. Before we get better, though, we need to see where we are right now.
During a lazy Saturday, I read and collected a lot of candid opinions on what actual, real software engineers have to say about what they hate about their work. Then, I took some organizational assistance from ChatGPT for my data, also asking for some additional general information in this area, and sprinkled a fair bit of own analysis, pruning and experience on top like a tasty pizza. Let’s look at the results below!
It’s important to note that each organization is unique, and the specific actions needed to address these negative conditions may vary. Organizations should assess their current situation, involve employees in the process of identifying improvement areas, and tailor strategies and actions to their specific needs and culture. One way of doing so is to run surveys, such as the SPACE or DevEx surveys.
Why do software engineers hate their jobs?
These are the top 5 categories with examples.
Interpersonal issues
Such as bad teammates (often with poor communication skills) and incompetence in project/middle management, often attributed to them having non-technical backgrounds.
Workload and stress
Usually connected to unrealistic business requirements or deadlines, and management prioritizing deadlines over quality. Also, the often long hours and resulting poor work-life balance.
Lack of appreciation and recognition
Lack of value placed on software quality, developers being blamed for issues beyond their control, feeling like a machine and not a person, lack of recognition for the complexity and overall difficulty of the work.
Environmental factors
Let’s be lucid: Many software engineers truly hate spending excessive hours in front of a computer and the generally unhealthy, sedentary lifestyle. They also hate open-plan offices, distractions, lack of work-life balance and physical activity, and the lack of diversity and gender representation.
Lack of professionalism and overall process issues
Technical examples include poor (or no!) documentation and lack of principled engineering work, the presence of heavy technical debt and reliance on legacy code, and unreliable dependencies. Wider issues often mentioned include a broken and unprofessional interview process, lack of clear requirements, and miscommunication between groups and people.
While this is based on no more than a few hours of online reading and the dataset resembles precisely that (but then again, there’s at least my own experience to back it up), I think there is a good takeaway already at this point:
Software engineers have their most common pains in various forms of structural/organizational mismanagement and process failures.
Shaping a Thriving Software-Producing Organization
So, what do we do about it? There are a bunch of things, actually.
For even more on this subject, you might also want to read my article “Software Delivery That Makes Sense” that goes into more detail.
Foster a positive and collaborative work environment
Provide opportunities for professional development and skill enhancement. Promote teamwork and knowledge sharing to enhance collaboration and mitigate conflicts. Create a culture of respect, where individuals feel valued and supported. Encourage open communication and collaboration among team members—read and engage with books like Radical Candor and Extreme Ownership for inspiration.
Enhance code quality and maintenance
Start by implementing code review processes (synchronous like mob/pair programming, or asynchronous like pull requests) to ensure code quality and adherence to industry best practices. Also, invest in automated testing to catch bugs early and ensure code correctness. Drop those manual testers like they are snot.
Don’t forget to plan for continuous improvement and, when needed, allocate dedicated time for bigger refactoring work and addressing technical debt to improve code maintainability. Encourage or enforce documentation in the daily work to enhance understandability and the continued ease of maintenance.
Improve hiring and interviewing practices
Most engineers are crap at interviewing, let’s just face that fact. Make a selection of those folks who are truly well-suited to interviewing and train them on effective and fair interviewing techniques. Establish a structured interview process that evaluates candidates based on their actual skills and problem-solving abilities, not random puzzles they wouldn’t do in the line of duty. Always provide constructive feedback to candidates to help them improve and understand areas for growth, regardless if you take them on board or not.
Promote work-life balance and well-being
Foster a culture that values work-life balance and supports employee well-being, which means setting the bar right; for example, avoid sending those 11PM emails. Offer flexible work arrangements to support work-life balance—if you haven’t heard, most people in software engineering are more productive and enjoy their work more when it’s remote-first or at least flexible.
Go ahead and encourage breaks, physical activity, and time away from screens in smart ways, by for example setting the default meeting time to 5 minutes less than a “full block” (i.e. 25 or 55 minutes…). Provide resources and support for employees’ mental and physical well-being.
Embrace continuous improvement and learning
Emphasize the importance of innovation, experimentation, and staying up-to-date with industry trends. Create a culture of learning and continuous improvement within the organization, such as competence groups, book circles, and training sessions open for all. Encourage employees to learn new technologies and improve their skills, maybe by making learning a requirement during the merit/performance reviews. Make sure to have ways of certifying, objectively, employees’ skills and continuous learning.
Simplify processes and reduce red tape
Evaluate and streamline internal processes to reduce unnecessary meetings, bureaucracy, and inefficient workflows. Empower teams to make their own decisions and remove unnecessary layers of approval, handoffs, reviews, or other process waste. Implement agile methodologies to promote flexibility, efficiency, and adaptability.
Foster diversity and inclusion
Create an inclusive and welcoming environment for individuals from diverse backgrounds. Actively promote diversity and inclusion within the organization. Implement policies and practices that promote equal opportunities for all employees if you don’t already have those in place.
I hope that this little research project triggers you to check with your organization what its pains are. Wish you the best in your organization witch hunt!