Let me start with some observations:
- the most popular tech meet-up talks are about the most hard-core, niche, infrastructure-level optimisations & techniques - while 97% people in the audience never encounters any practical scenario these apply to (e.g. web MVC-style app programmers listening about data serializer replacement or memory allocation optimisations)
- people who are the most interested in Domain Driven Design are the ones who are expected to mass produce trivial, CRUD-style systems of record (where DDD is simply an overkill ...)
- folks who are the most crazed about micro-services are the software house programmers, bootstrapping yet another start-up skeleton that may not be used by anyone on the surface of Earth ...
- we're absolutely fascinated with fancy actor models, consensus-building algorithms, preemptive schedulers, while the truth is ... we never have to use them directly, because they are embedded deeply in the frameworks, servers & toolkits we depend on
It appears that instead of tuning our everyday work techniques we (software developers) do notoriously look for a totally different (elevated) level of a challenge (out of our currently economically-justified focus area) ...
To the point
Why don't we face the facts then?
- software engineering is absolutely fascinating and there are incredible toys available just within reach of our hands ...
- ... but 99% of us don't need them in our professional job - such a vast majority of folk is paid for commodity work that (if you look at it carefully) is highly repetitive and based on a very limited set of pieces of technical abstraction
Still, we're attracted to anything that could make our work more exciting & challenge-rich, like moths to the flame. Hence the boom for various (notoriously unfinished) side projects & OSS in general - we try to accomplish in our spare time what is beyond our reach during work hours. That's also why we always try to incorporate some experiments in whatever we're expected to do next in our day-time job. For example to event-source & CQRS-ize everything ;P
The reasoning behind that state of things is simple: modern, successful software products involve a lot of creativity, but usually in a product-shaping area (business model, usage, identifying proper needs, providing completely new services) - software engineering technology IS indeed powering them but IS NOT a differentiator (usually). It's just the building block (or rather: fabric) - the simpler, the more mundane & boring - the better (aka the cheaper & faster).
Not all jobs are alike (though)
To be frank, I don't think we, developers, are good in comparing job offers. E.g. in all major tech hubs local job boards list tens if not hundreds of nearby Python positions - all of them look alike (Python is just Python, right?), yet they can be completely different:
- [PRODUCT DEVELOPER] the majority will be about pure product (& hence tech commodity) - e.g. building idiomatic Django apps (view, model, template, view, model, templa...) that will hopefully rock emerging digital market(s)
- [ENGINEER] some (few percent at most) may be about real engineering - e.g. building infrastructure-level tooling that is all about optimising throughput, processing speed, resource utilisation or security level (value proposition is clearly about technology excellence here!)
- [SCIENTIST] some (leftovers ...) may be about truly scientific R&D - these ones are about turning advanced theoretical concepts into entirely new solutions, ones that haven't been commoditised yet (recent examples: decentralised app models like Ethereum, "smart" cognitive services, deep fakes based on GANs)
Jobs within all three of these categories can be absolutely tremendous & 100% fulfilling - but only if they match your personal preferences (/ambitions). You need to be very honest with yourself: what are you actually looking for, what brings you the most satisfaction in the programmer's work? The constant state of boredom in work is usually caused by the fact that you are fooling yourself that what you're doing has anything in common with what you'd like to be doing.
How do companies address that issue
Employers do realise the nature of that problem much better than many do expect. But they are also desperate because of the demand VS supply disparity in the job market. That's why they are quite creative when it comes to addressing the issue:
- bribery - people are paid above the market rates, just to fight off the temptation to leave for a more aligned role ("golden cage")
- loose shackles - engineers are given enough slack / freedom of choosing tools to keep them satisfied with enough novelty, employers have this "distraction" calculated in the overall cost (they write it off as a potential "waste")
- acknowledging high turnover - accepting the fact that the average employment period per individual has significantly shortened down & people do get annoyed & leave; such companies do optimise for: cheap "resource" replacement, avoiding knowledge silo creation, etc.
- pretending they can induce completely new motivations within individuals - by "inspiring", incepting, envigorating, pep-talking, creating sense-of-urgency & pumping up the overall pressure within the work environment
My few words of advice
There are (always) options. But the alignment is crucial. Forcing your employer to enable your desired professional development path if it's not aligned with that company's goals just WON'T work (mid- and long-term). Fooling yourself that the things will work out (somehow) simply makes no sense (unless you're fine with the "golden cage" kind of deal).
My suggestion is to:
- state (honestly) your ambitions & motivations
- assess (fairly) your capability, potential & commitment level (making the REAL difference on the field of engineering requires a significant effort)
- build 100% awareness when it comes to what's your employer's value proposition about (& how you can impact it personally)
- act upon the conclusions of the points above; and don't hesitate
Good luck.
Because it's only boring people who let themselves get bored.