Sometimes the glitz and glamour of programming for a living is interrupted by a colleague smashing their head into their keyboard. There are many modern day innovations that have enabled software engineers to be more productive and ship code with greater speed and quality. But there are also things that make our jobs harder… Let’s start with the bad news… 1. Your work is never finished As a developer, you come into work most days to be confronted with a list of all the things that are wrong with your software. All the things it does wrong. And all the things people want it to do that it doesn’t do. Almost all the interactions you have with the people who use your software are because they want something you haven’t given them. They don’t understand why it’s not as easy as they think it is. We dream of the day someone thanks us for completing everything in a project perfectly. Without any ‘extra’ requirements thrown in. Better specifications and requirements upfront please! 2. People don’t understand what it is that you do (still) Maybe your Mom’s friend needs help with her printer and has been told you ‘work in IT’. Or your product manager has zero technical background and zero understanding of engineering best practice. , and you’re having to report to people who don’t know the requirements or limitations. It seems like nobody understands your job Explaining exactly what you do can seem a challenge not worth bothering with at times. So you just settle on at social functions. ‘I work with computers’ 3. There’s so many new languages and frameworks to learn In the time you’ve taken to read this article, there’s probably that you should be using. It seems like no one codes HTML directly anymore. another new JavaScript framework really It feels like you’re having to re-learn your job every five years or risk irrelevance. It just goes on and on and on and on… There’s been an explosion in the number of languages and frameworks that need supporting and developers can find it hard to keep up! Learning about any additions to the 400+ programming languages and frameworks already in existence would be a full time job. Why are you not spending every weekend playing around with the latest tech? Perhaps you have a life outside of work and don’t eat, breathe and sleep code. Shame on you. 4. Working with other people’s code “WHO WROTE THIS CODE?!” “This is complete spaghetti. It makes no sense!” “I’m checking the commit history… I want to know who wrote this garbage….” “Oh wait, hold on…. “It was me last year.” Apart from modifying your own legacy code, , yet you’re expected to just jump into it and simply carry on writing. trying to understand how a piece of legacy code operates is huge pain Working out the intentions of the original developer is even harder when that developer isn’t around anymore and the code is poorly written, commented or documented. If only people would understand. But, there are a lot of good things too… Modern day software engineering has actually never been easier. Here’s why… Applications now tell you when they’re sick Traditionally, developers have relied upon their users to spot problems they encounter when their apps are in production, but all that’s changing. , without the need for users to report problems, are already used by the world’s most innovative companies, and they’re going to get even smarter still. Telling you when to pay attention and where the root cause of an issue ultimately lies. Error monitoring tools that can tell you what’s wrong with your application and why This means more engineers can be allocated to building new features, functionality and products rather than maintaining them. With problems loaded into bug trackers automatically, removing the manual process. Your tools likely know more about your software and customers than you do. So there will be no excuse for shipping crappy software . Your tools can do the heavy lifting for you We used to only have to worry about a couple of devices and screen sizes. Now the landscape can change completely whenever there is a new product released at an Apple, Samsung or Google keynote. Cross platform frameworks and tools allow developers to cut the amount of duplication and effort required to support their users on whatever device, browser or operating system they choose. are gaining in popularity as they work for every user, regardless of browser choice, because they’re built with progressive enhancement as a core tenet. Progressive web apps , which was acquired by Microsoft in 2016 has enabled thousands of teams to deliver native Android, iOS, and Windows apps, using existing skills, teams and code rather than having to create seperate apps for each platform. Xamarin And tools like , and have meant front end developers no longer have to start from an empty CSS file to get their pixels to play nicely. Foundation Bootstrap Semantic UI Life would be a lot harder without these tools, not having to do everything from scratch is quite the luxury. Shipping days are dead — hooray! Shipping days used to involve a lot of nerves and stress, as the time to hit the release to production button drew nearer and nearer. in favor of more iterative and smaller deployments. With many now shipping updates, feature releases and bug fixes several times a day. Continuous integration and delivery is picking up speed as teams start to shy away from big, scary release cycles This is likely giving them an advantage in delighting their customers, because they have many more chances to deliver new value, and what they release is of higher quality. The result is faster time to market, better customer experiences, and higher responsiveness to market changes. The days of pushing a broken release into production and everything exploding for end users (of the fear of this happening) is behind us for most teams at least. So what do you think? Have we ever had it this good? What are the best and worst parts of software engineering for you?