Most software developers will recognize the scenario that John Macpherson, lead developer at Scottish web design company Media Surgery, describes as one of the true highs of his job: that feeling "when you test the part you have been working on for days or hours—and it works! You feel like you are an unstoppable superpower that can do anything. A real feeling of euphoria." They'll also recognize the flipside: "When you have been working for days and hours and it doesn't work. You feel worthless and question why you are even employed at all. You feel a fraud. Either euphoria or imposter syndrome. It's a strange old job, but enjoyable—for the most part."
I asked developers and the recruiters and managers who work with them what they love about their job, and what they don't. Answers varied, but there were quite a few points in common. Sometimes, as with Macpherson, it turns out that the pleasures and pains of software development are opposite sides of the same coin.
Solving problems vs. reinventing the wheel
One of the most frequent themes was that developers love problem-solving. Computer programming is just a way to scratch that itch.
Percy Grunwald, full-stack software engineer and co-founder of UK-based webhost Hosting Data, summed it up: "You won’t enjoy developing software if you don’t love solving problems." Jacob Mages-Haskins, a staff software engineer at Contrast Security, also likened software development to solving puzzles: "As a developer, I love the challenge of implementing new features in code. It is like I have a new puzzle to solve every day."
On the flipside, it can be disheartening to devote long hours to a problem only to discover a solution already exists. "One thing I don't love is the constant need to reinvent the wheel," said Zeeshan Arif, Founder and CEO of software development company Whizpool:
This happens a lot in programming because there are so many ways to do things, and each way has its own tradeoffs. You have to choose which tradeoffs are worth it for your application. It can be frustrating when you realize that the thing you wanted to do was already done before by someone else, but it's also exciting when you find out there's another way of doing things that seems like a better fit for what you're trying to achieve.
Knowing that you might be able to surpass your fellow developers can be a spur to greatness, suggested Grunwald. "In software development, there are many ways to accomplish the same task," he said, "and it’s always a challenge to come up with the best one. Such challenges are very interesting. Being creative and testing different options is one of the best things about being a software engineer."
Craft vs. process
Most developers also expressed a sense of satisfaction from the process of creating software. As Whizpool's Arif put it, "I love being able to create something that other people can use. It's like being a craftsman, but with code." Alexey Sutyagin, who has 10 years of experience as a developer and engineering manager, used an even more powerful metaphor. "The most fruitful part of being a software developer is a sense of magic when you are creating something new from pure thought," he said. "I wanted to be a wizard in childhood, and developers look almost like magicians of the modern world."
In the same way that a craftsman feels a special satisfaction looking at a table or cabinet they constructed, developers can derive happiness from seeing the end product of their labor. "Being able to communicate with machines feels like a superpower," said Daniel Jianu, senior front-end engineer coach at Toptal, a freelance developer network, "I’ve used it many times to help patients in the healthcare system, to monitor radioactivity levels in nature, and to manage poker tournaments with friends."
"For me, the most satisfying feeling is seeing people using your software out in the world," said Nate Berent-Spillson, vice president of engineering at software development consultancy Nexient. "I rarely ever mention it, but when I walk into a store that’s running our software and see the person behind the counter tapping on a screen we made or see a delivery driver or a retail worker using a mobile app we wrote, it’s very satisfying."
On the flipside, some developers mentioned aspects of their job that are disconnected from their sense of craft. Meetings were a frequent sore point. "Being a software developer includes meetings that are often unproductive, repetitive, and irrelevant," said Grunwald.
Rajeev Bera, founder of IT training site aCompiler and senior developer at an IT company, concurred: "most of the time, these meetings do not add any value." He continued, "occasionally I have to create documentation, which is non-creative writing, and to be honest, I'm not too fond of this."
In general, more corporate environments involve more process—and more frustrations for developers. "Working in a corporate company can sometimes affect the autonomy of their role," said Kishan Patel, executive consultant at fintech recruitment firm EC1 Partners. "Endless red tape leaves the developer with less freedom to be expressive in their code as well as less flexibility." Nexient's Berent-Spillson noted he gets frustrated when "I see teams wrestling with policy more than code."
Rafał Gatkowski, senior developer at Python development company STX Next, struck the balance: "All processes impede development, but some level of process is required to create good software." The key in his mind was not letting processes spin out of control and take up too much of developers' time. "Turning a daily 15-minute team standup into an hour-long (or longer) cross-functional status meeting is the most common example" of a flawed process, he said.
The joy of teamwork vs. the grind of collaboration
Much of the "process" side of work arises in the context of teamwork and collaboration. For many of the developers that I spoke to, the camaraderie of working with others was one of the best things about their job. For instance, Caleb Chandzamarda Junior, a Python developer and cyber security engineer, said that some of his favorite parts of his job were "thinking and talking about design and weighing pros/cons about each to find the right answer, and working on cool products that I would never be able to do on my own."
"At the corporate level specifically, the ability to work cross-functionally with many different types of professionals can be particularly rewarding and interesting for both day-to-day and long-term career development," said Joe Guarascio, director of talent coaching and talent operations at Toptal. "Our talent love opportunities to work alongside, for example, project managers, product managers, and business operations."
That said, the day-to-day reality of collaboration can eat up a lot of energy that most developers would rather spend coding. "As a corporate developer, I hate how the costs of communication and coordination grow so quickly when even just a few teams are collaborating together," said Contrast Security's Mages-Haskins. "As the late Fred Brooks pointed out in The Mythical Man Month, as the number of people involved in a project increases, the number of communication pathways between those people explodes—and that has certainly been my experience in any non-trivial project." Still, he added, "everyone is needed though to make sure the features are useful and delivering value to our customers."
In a worst-case scenario, what should be collaboration instead turns into a more adversarial relationship between coworkers. "In big corporations, it is a commonplace to work hard for the whole year, but in the end, your project is closed as unimportant, or you don't receive a promotion because your impact is too small," said Sutyagin. "So you should select projects carefully. If you have a competitor in your team, you should convince him to choose something else. We could say that this is the way the world is. But this isn't why we become software engineers."
Work-life balance vs. imbalance
Say what you will about software development, but it's not like working on an assembly line. "Software development lends itself well to freelancing, as well as remote work," said Toptal's Guarascio. "The freedom to work on a variety of projects, from any location in the world, is very alluring to many of our talent."
And in the past few years, that flexibility has only expanded. "We are given enough freedom to allocate our time during the day however we choose," said Tina Liu, senior software engineer at healthcare analytics company LeanTaaS:
The Covid-19 pandemic, which changed how our team and company cooperates and communicates, allowed us to embrace remote work. I recently had a baby in May 2022, and I feel lucky to be able to work from home. I can check and care for the baby during breaks or between meetings. I have the flexibility to make up time and finish my development tasks during the night when the baby sleeps. The freedom I have makes my mom jealous as she didn’t have that kind of flexibility in her career and couldn’t see me during the day when she is at work. She told me 'This is truly living a life.'
But while not having a strict 9-to-5 schedule can be nice, it can also be burden. "Software developers have a lot of workload. They juggle an overwhelming amount of projects and continuously multitask, jumping from one task to another," said Grunwald. "They are required to work consistent overtime and non-traditional business hours such as nights, weekends, and holidays." Burak Özdemir, founder of Character Calculator, added that, in many cases, "we find ourselves working long hours in front of a computer, with little human interaction. And we may feel like our work is never truly finished, as there is always something new to learn or something that can be improved."
And while software development isn't the most physically demanding job, it does have its issues, Özdemir noted. "Ergonomics can also be a challenge, as we often spend our days hunched over a keyboard," he said.
"If there is anything else that I hate, it would be that I have to stare at the computer all day long and that’s hard for the eyes, and the muscles of the neck and upper back, which is really not avoidable," said Liu. "So I often give myself reminders to take a break and do some exercises to ease my eyes and release muscle tension."
The tech dream job vs. the actual job
In the end, much of the experience you'll have as a developer will be determined not by generalities but by the specifics of where you land—and that can have a huge impact on your happiness and well-being. "Not all organizations or departments are created equal," said Jared Ledbetter, CEO of web design and SEO firm Carbon Digital:
If you’re in a department that is all developers, then it’s got a higher probability of being a decent place. It’s the non-developers in management positions that I take issue with. The ones who want everything done now, but don’t want to define or establish a process. If I recommend that we utilize a project management system like Jira or Azure DevOps, these managers who don’t understand reject it and point to MS Word/Excel/PowerPoint. Or, if I recommend that we need to utilize a process like agile/scrum, it’s accepted as a good idea, but you’re still forced to work in waterfall mode.
Chandzamarda expressed similar frustrations, noting that it's stressful to have coworkers or managers "who are not forward thinking—it's all about now and not how do we envision this product in the future. We should be thinking about what steps can we take now to set us up for that future path."
Still, software development is a high-demand skill, and, as STX Next's Gatkowski put it, "The unquestionable advantage is the fact that it is very easy to find a job." Jobs in tech also pay pretty well, as EC1's Patel noted, "the financial rewards and career progression of working in software development are second to none." With a little time and effort, most developers can find a job that lets them do more of what they love and less of what they don't.