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…
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!
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.
It seems like nobody understands your job, and you’re having to report to people who don’t know the requirements or limitations.
Explaining exactly what you do can seem a challenge not worth bothering with at times.
So you just settle on ‘I work with computers’ at social functions.
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.
“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, trying to understand how a piece of legacy code operates is huge pain, yet you’re expected to just jump into it and simply carry on writing.
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.
Modern day software engineering has actually never been easier.
Traditionally, developers have relied upon their users to spot problems they encounter when their apps are in production, but all that’s changing.
Error monitoring tools that can tell you what’s wrong with your application and why, 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.
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.
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.
Progressive web apps 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.
Xamarin, 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.
Life would be a lot harder without these tools, not having to do everything from scratch is quite the luxury.
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.
Continuous integration and delivery is picking up speed as teams start to shy away from big, scary release cycles in favor of more iterative and smaller deployments. With many now shipping updates, feature releases and bug fixes several times a day.
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.
Have we ever had it this good?
What are the best and worst parts of software engineering for you?