Need some advice, feeling depressed about the direction of our industry

61 points by clouded ↗ HN
First post here. It's 2 AM and can't sleep. I'm 40 and the majority of my experience has been in Java. Spring, Spring Boot, Hibernate, what you'd expect. I'm pretty much at the top of my game (which I know is specifically Java, but bare with me).

We all know technology constantly changes and progresses, and I've always thought that's fine, I'll be happy to learn whatever replaces Java because it will be better, right? I've seen Go coming along, Kotlin too. But I've been hit like a brick in the face to realize where we're headed. AWS. The cloud. I'll get to the point. I hate it. I've seen it happen personally at two companies now. The transition to the cloud. Where we throw away everything we've spent years learning to reinvent the wheel. We throw away relational databases for MongoDB. I love SQL. I'm good at it. But no one cares. MongoDB is "in" now. I'm good at Java. Years of experience and I finally feel good in my abilities and speed with the frameworks, ORM's, best practices, etc. We're just throwing it out like it's nothing. For AWS products. Lambdas written in Typescript (why Typescript, I don't know, the same reason I don't know why MongoDB). Files of YAML configuration, and Kubernetes and a lot of other things I don't care about, just to create the same CRUD apps we've always been creating.

I've been buying power tools and learning how to use them. I've started taping and patching drywall. I've cut down trees. I want tools that won't change every 5 years. I want tools that I can master and will be relevant in 50 years. Maybe I'm too old to be a carpenter, or tradesman. I just need some advice. The worst thing is, developers are embracing this AWS trend and seem to love it. No one seems to mind. Software engineers are cursed. Just when we've established a best practice and it's a solved problem, we throw it out and reinvent a new way to do it.

Please let me know if I'm not alone, or if it's just me and I need to adapt or get out of the way. I will predict this though: AWS is a mistake. It's not fun. It's not "software engineering" and it won't be here in 10, 15, 20 years. All your mastery of Kubernetes will be for nothing. It will be tossed aside like trash. And the worst part is when that day comes everyone will act like it was never that great all along. They'll also embrace the next trend like it's the greatest thing ever. Because software engineers are cursed.

131 comments

[ 5.3 ms ] story [ 221 ms ] thread
Chill out. Go and get laid.
Are you saying I can actually get paid for that? Wait, I really am in the wrong field.
AWS is so huge that you shouldn't generalize like that. If you want to, AWS is just a bare metal box in some data center. You don't have to write lambdas in typescript that talk to MongoDB to use the cloud. You can write Java that runs on EC2 and talks to Postgres. So I wouldn't blame the shift to the cloud, I would blame whoever in your company is advocating for doing things in a way that don't make sense for your application.
Of course, but that's not how I've seen it play out now, twice. They're eerily similar in going all in, full cloud mode kubernetes docker yaml hashicorp trendy product soup. Complete with architecture teams who try to wrangle it into a best practice starter repo for all engineering teams to use. I have no say in it otherwise yeah you can deploy on a bare ec2 instance but that's too simple for a serious enterprise software developer.
Having a starter repo is a good sign. What should be happening is that such architecture teams (or platform teams as they're usually known now) hide all the complexity of how and where things run, beyond a simple set of guarantees handed to developers.

As much as I love setting up single instances and deploying directly on it, it does not scale and the quality of the deployment is very dependent on the developer. The quality and even existence of documentation for the same too.

architecture teams, platform teams or core teams as they are usually known have incentives that are misaligned with those of normal teams and more importantly with the business.

And the reason is indirection. They are two layers away from the business, shielded first by product people, then by product developers. As a consequence, they live in a bubble where nothing matters except a good starter repo or a new standard to push onto all the recalcitrant idiots that work on _products_.

I know that this notion of my job exists, but I don't agree with it at all. Making it easier to use your platform than building things from scratch is really the only way to sustainably build a platform people don't work around all the time. Being able to bake policy into that platform is just a nice bonus.

You are right about one thing though, I've seen enough undocumented deployment crap held together by hot glue prone to cause the next incident whenever someone hits the wrong button that my relationship with developers that dabble in ops is at least somewhat adversarial.

Note that this is different from developers that have a need they don't immediately know how to solve (and is not covered by a platform team) and either ask an architect (those are different from platform for us, by the way) or invest the time. That still often leads to cognitive overload or eternal temporary fixes, but it's still better than "why do you care, it works, I only had to punch 10 holes into the firewall and commit one service account key to git" type developers.

My personal experience with core teams has often been a disaster. The only successful core team I saw adopted the servant leadership approach, letting product teams make choices and staying pretty much out of their way while codifying existing practices and moderating discussions. It also served as interface to external infrastructure and engineering.

This core team was busted after a few years, its head fired and replaced by an oppressive junkie that started spewing corporate standards and imposing frameworks with the speed of an office printer.

You really have to have a special mindset to be willing to join a core team, and this mindset is opposite to what people that deliver a working product have.

There is a reason why "premature optimization is the root of all evil" is the motto of many generations of programmers. From their perspective, core teams are personified evil, because their only purpose is to optimize, prematurely.

My first experience on such a team was a team that started out improving a lacking standardized deployment process (including changing the target from a very bad slow scaling prone to errors AWS product - yes beanstalk - to k8s). The biggest benefit here was that the team was on the same floor as most developers, and the entire company was really small. We knew the challenges that developers faced.

We then eventually rewrote the platform from an "everything is implicit" approach (branch leads to deployment with stable URL x, logs end up at Y, metrics get scraped at Z) to "everything is explicit but we have a second component that emulates the old way unless overruled". Nothing changed for developers, except that they got a lot more levers.

Then that company was merged back into the mothership (it was a "moonshot startup make an online shop for us" kind of company) and everyone there that could be enthusiastic about technology was excited about the stack, considering they were stuck in the 2000s before. The tech turned out to be flexible enough to accomodate the needs of modern Scala/Node services and legacy PHP alike (with the help of a base image that included a little go proxy to add standard HTTP metrics).

Unfortunately there was a change in leadership to someone who wanted to essentially recreate a tech stack they had used elsewhere. Akamai to Cloudflare, AWS to GCP, Slack to Teams... unilaterally. The team imploded within a year and a large Kubernetes vendor came in to get developers on "standard tooling".

As far as I can tell, 2 years later, our infrastructure survives though. We built it pretty tough and I guess none of the other "standard tooling" solutions really fit. The vendor even ended up asking if they could open source the system. Unfortunately nobody in legal cared enough to figure that one out. I'd have liked it to survive somewhere.

It's a very unique story of a platform that actually evolved mostly organically, and I realize that most attempts at platforms don't work that way. I always try to take learnings from this into new attempts, and it has been working pretty well. Getting someone from platform to work in development teams is probably the most useful thing I'd recommend.

Yes.

There are two types of problematic teams in these companies. Those that never want to change anything, and those that chase new technologies for the sake of it - maybe they want to learn something relevant for the future. If you're unlucky, your leadership is too far in one of these directions too.

I can, for instance, tell you that Kubernetes is a worthwhile investment if you're large enough and you never have to touch 99% of it. People often get it wrong and throw a kubernetes endpoint at developers and then wonder why there's cognitive overload and everyone just does the most minimal thing that works without taking any advantage of the new environment.

There are plenty of places that do Spring now and manage to let developers do the things they're good at without constant interruption. You just need to find one. You also may need to learn Kafka, since that is where most of the data in large constructs ends up in now.

You're not alone in this feeling. I left the industry because of the "trendiness" or "shiny object syndrome". Then put on top of that the change from serving people to spying on people and that was all for me.
It's happening everywhere, not just computing. E.g. there was a thread about the decline of the quality of dental care a few days ago:

https://news.ycombinator.com/item?id=31790226

Greed is taking over.

It’s not about the decline in the quality of dental care. It’s about dishonesty. There’s no implication that things were better before and people used to be honest. Things weren’t better before. We just know they suck now.
Is MongoDB really "in" now? From what I've seen it was popular for a while a few years ago with the MEAN stack and all that but it didn't stay popular, every job I've looked at was still SQL. I did work somewhere that went NoSQL but it wasn't MongoDB, it was DynamoDB.
In companies stuck in the 2000s it happens quite frequently that only a few people care in the first place and get a lot of reach with their notion of "hot newness", even if that newness was hot a decade ago.

I've heard some interesting takes in sister companies. Just a few months ago someone explained how continuous delivery is a pipedream and nobody does it because it's unfeasible, but they would like to not have every release (literally) signed off by management. I guess my work in the past 4 years was all a lie.

Mongodb still comes up a lot, if you hire a team in South Asia for instance it's very likely to be based on the mean stack. It works great when you're doing demos and beta testing small customer sets but it has a lot of trouble scaling. In fact, I've made a bit of a career catering to that exact situation. I just happen to have taken a dislike to SQL so I hopped on the nosql bandwagon early. Now, I'm an expert at creating complex indexes and helping people enforce schema and rationalize their operations. Often times, postgres is brought into the mix as a hybrid solution and over time dependency on mongodb can be reduced or eliminated.

Look, the alphabet soup of technologies that we read about here on Hacker News don't really represent the reality of what gets put into production and actually works. There are really only about four or five stacks that really matter, I'll leave it as an exercise for the reader to figure out which ones they are.

MongoDB has been put to shame by Aphyr. OTOH, DynamoDB is the tool of choice for Java developers doing greenfield projects on AWS.
Yes, I thought the NoSQL hype in general peaked around 2015. God no, MongoDB is out there. And they've realized that in fact data does need a schema. And transactions. So they did that. They'll probably just tack on SQL query ability at some point. It's the biggest disgrace to our field I can think of. From the people promoting and selling it by implying that relational databases just aren't good enough anymore to the developers embracing it with open arms, willingly throwing out however many years of SQL knowledge they've built up.

Relational databases are the result of 50+ years of computer science research. They're beautiful, focused, precise. They're pretty damn close to perfect. They are a solved problem. They're one of those few stable tools I was talking about wanting so badly. So what do we do? Throw it away. I'm too disgusted to continue.

You have been able to do SQL queries in MongoDB since 2018. Just this month we launched AtlasSQL, a new SQL query interface purpose built for MongoDB Atlas.
I agree with the sentiment if you are creating things that can only be run in AWS. You're setting yourself up for vendor lock-in. However Kubernetes should be cloud agnostic, make sure you use it that way.
Hmm.. mongo might be hip or whatever but sql as a whole is not going anywhere. Perhaps some businesses will switch but half the world has already been built on sql, and new things are being built on sql all the time.
Agreed same shit at my work. We have a maintenance problem but the other devs are wanting to solve a scaling problem that we don't have and are unlikely to have in the foreseeable future. Talk of microsevices and one database per service, which will only complicate things and put a load of unreliable network call into our already buggy system. Dev environments that take forever to set up and are incredibly fragile.
Companies switching to cloud? It makes sense why they do it - that layer of problems was solved for you, and solved well enough. Your company should focus on what it does best, theres surely tons of other challenges in the interesting parts of your stack, the ones you cant just grab off the shelf. There is plenty of fun to be had there.
no, you are not alone, I was laid off when the pandemic started, and I got a job doing web dev, I won't go as far as to say I "hated" it, but I didn't like it, I since did a software engineering internship, where I did automation stuff library dev, and went back to finish college, and specifically applied for a job where I won't work in "web stuff"

also, jobs that aren't about doing cloud stuff config do exist, if you really dislike that, you can change jobs (unless you can't? what with financial stability, depending on your situation)

if you're skilled at programming, even if you've only ever used one language, you should be able to program in another, you might not be as skilled as your preferred language, at least initially, but that shouldn't be a problem in the long run

As someone adjacent to software but not really a dev in that sense, it's stuff like this I rant about all day here and (unforunately) to my friends and family is how devs can't just embrace things that work but have to reinvent everything every couple of years and how that attitude makes life worse for everyone, both users and those downstream from software like me.

I don't know how to fix it because it seems like an industry wide problem, a very deep cultural problem that absent some outside force will not change. Just as a note, the curse was called "CADT" by jwz back in the late 90s to early 2000s so it's been a part of the industry for a while and likely won't dissipate any time soon.

I wonder if the problem is that so many of my generation, including myself (I'm in my early 40s), learned programming as kids because it was fun, and we (including myself) never fully outgrew that childish mentality. Maybe the industry would be better off if more programmers were like my uncle who learned programming in college as a job to make a living, and treated it as such, and nothing more.
If not there at the very least should be a balance, where code can be "fun" and you can have all the innovation you want while at the end of the day, tried, true, and boring solutions don't get thrown out for no real reason.
First of all: You have deep knowledge. That is good and valuable. The Java ecosystem is not going anywhere and it will stay relevant for years to come.

But there are also other technologies that have their merits. I understand that you find it frustrating to look at them and you feel like it's a huge wall to climb to also learn these technologies after you have invested so incredibly much time in mastering the Java ecosystem.

My advice to you is: Don't stress out over it. Explore these other technologies without having to think about how you will use them in your professional life. Take away the pressure and focus on the enjoyment of learning something new. Eventually you will learn enough for it to be useful. And as stated previously: The Java ecosystem is not going anywhere.

You might also want to check out Clojure. It's a very different language but it uses the Java ecosystem, so you will still feel at home. https://clojure.org/

I'd recommend Kotlin instead of Clojure because it's very useful for making mobile apps.
Clojure has multiple hosts, I think there's at least 3 platforms that can make mobile apps under Clojure

ClojureScript -> React Native

ClojureDart -> Google Dart

Clojure -> GraalVM

Four if you consider Unity via Arcadia on Clojure's .net implementation

Most businesses I come across use React Native via CLJS

I don't think it has to be "instead". Both are good languages which use different approaches. And both can be fun for different reasons.
Clojure seems like the better choice for learning new stuff, coming from Java. A paradigm shift, which includes necessary learnings for understanding a lot of "new" technology.
No advice, I feel the same. The industry has gone to shit and it's crossed the point of no return. The only real innovation has been with AI. Everything else is an endless reinvention of the wheel. Most of the skills I've learned are equivalent to underwater basket weaving. OOP was supposed to manage complexity but it actually creates more complexity. Imagine going back to the 70s and talking to a developer learning C and Scheme. How depressing to tell them no improvements will be made over the next 50 years and languages will actually get much worse.
I don't agree languages have got worse, it's much easier to build anything today than in the 70s, not just because of tooling and libraries, but the languages themselves are just easier and help build structure.

What makes development 'worse' today I think, is much more of it is just integrating with myriad other systems, tools, etc, which can be dull and frustrating, and I'm sure no-code will just make it much worse.

And then there's scrum.

It's not easier to build anything. It's easier to build web applications and video games but we already have way too many of those. If you're doing something innovative you will find things have indeed gone backwards in a fundamental way.
How can this be true? You still have the option of installing a K&R C compiler or whatever.

What has changed is that the complexity required of software has vastly increased. And perhaps there's an argument that the tools and languages have not kept up.

But try developing anything today with an old version of any language or tools, and it's not better, else obviously that's what everyone would do.

People choose what language they learn based on what jobs are available. Companies choose what language they use based on what FAANG companies use. What you're saying is not obvious, it is a naive assumption. Popular does not equal good. If that's what you think you can go ahead and explain why Java is superior to C++. I don't think you even know why it rose to prominence.
I agree with the other post here, sounds like you need to find a new job. The cloud isn't your enemy; it's just a bunch of machines. The decisions that are being made at your present gig are orthogonal to the fact that it's in the cloud.

However I would add that sticking to one technology stack for your whole career is probably just not possible in today's environment. There's still plenty of places that are using Java, but they won't be the cutting-edge startups. Frankly, you may not want to work at a startup anyway, the pay is lousy, the equity is usually worthless, and job security is low.

I encourage you to methodically look at your skills, which Industries and segments they're valuable in, and what you need to learn going forward depending on which segment you end up focusing on.

(un)fortunately, even the Java shops do have to follow Java trends - let's not forget the Java world is quite a big world with many islands. Example: I develop lambdas in Java. It's just those trends are less seasonal than other (Javascript?) trends, maybe also because they aren't usually startups but rather enterprises.
You don't need to marry AWS, there's plenty alternatives out there. I think this is the best you can do because those companies with your help will grow.
Developing software for 40+ years, I feel you.

"Lambdas written in Typescript [...] Files of YAML configuration, and Kubernetes and a lot of other things"

Building my next side project with https://www.radicalsimpli.city/

I would love to simplify everything and happily do request-server-db-server-client for the rest of my life, unfortunately "work" inherently brings "worker" which inherently brings "queue" which inherently brings "messaging" which is an "async" concept and I end up with distributed computing no matter what I do.
Ok. As a fellow Java fan I think you need to stop painting everything new with such a broad brush, that is a recipe for depression.

Sure there is lots of rubbish out there.

You probably shouldn't touch Lambda with a 40-ft pole, Go is mostly just C v2, Node.js will make you question the life choices that led you to using a jank scripting language on a server. MongoDB don't even, just no.

However not everything in the last ~10 years is useless. AWS EC2 and S3 are awesome services. k8s is actually good, assuming you have competent administrators (otherwise stick to GKE, or EKS if don't have ability to go to GCP).

There is nothing wrong with building a modern Java app on k8s and PostgreSQL. You might even come to like the standard runtime environment that k8s provides. It integrates fairly nicely into the Spring way of doing things. You can also do containers in Java better than pretty much any other language, take a look at Google's jib tool.

I think k8s (or something like it) is here to stay because it transitions to the runtime to be declarative. i.e it's the SQL to the Mongo-like (not entirely true but close enough) in the infra world.

Cheer up mate. You will find places/people that respect your knowledge and aren't rushing to upend good solid boring tech for no reason.

Software tends to get thrown away after a few years. Nothing I've written as a professional programmer has survived the test of time. No regrets, though. Why would I carry the burden of self importance to even be bothered about this? Do we really need to cast our work in stone? It's just work and you probably got paid a bunch. Nothing wrong with that.

My advice would be to find whatever motivates you in your life. What makes you happy? Challenge yourself and everything you've got.

To be fair he is coding Java. He has literally been chilling in an ecosystem that has not only stood the test of time but is seeing a big resurgence... Unless you count J2EE falling by the wayside or SOAP not being hot anymore most of Java has just seen steady improvement rather than replacement for the last ~10+ years.
I disagree, I think we just got caught up in a whirlwind in 2015 that people still haven't recovered from.

There actually hasn't been any real trend away from current tech since about 2015. People are still using the same TypeScript/Node/Python/Go and GraphQL/MongoDB/Postgres stacks, still using Docker/Kubernetes, and still using React/Vue for frontends.

The trend towards cloud-based services was also started around 2015. People are still using Heroku despite it largely being considered stagnant. Cloud services like AWS are just more convenient for teams that don't own hardware.

I don't see any of this tech going away or being replaced because I don't think anyone can think of any better abstractions right now. Hardware and platforms would have to fundamentally change in order for software engineers to start thinking up new ways of abstracting them. Current tech stacks will of course be endlessly tweaked and "improved", but I don't think anything major will change for a long time.

The newest thing that I can think of is just a CSS class library called Tailwindcss. That's literally the only change in my basic stack in the past few years.

I also don't believe any core tech is being thrown out. As others have said, the initial excesses of the web tech whirlwind are receding back quite a bit.

Based big thought here. It's curious that industry tooling is arguably plateauing around then, but it's also amazing that the database, er, SaaS is on such a long run, like from a diffusion of innovations way.
That is the curse of experience. In any field, I’d imagine. The trick is to be able to share your experience in a way that it get heard, watch people hit the fall when it is not and then help pick up the pieces without going “told you so”. I cannot do that sustainably and thus do not work in corporate environments. But it is my fault, not theirs, as such is the nature of the beast
Although computer science is not software engineering, the theory underlying design and analysis of algorithms will outlive any specific programming language that implements them.

Perhaps it would be good to get more into the theory of the algorithms rather than specific implementations.

It is why computer science undergrad education does not emphasise programming as much as the theory, in 50 years the theory will stay.

My friend, in my opinion "cloud" is a temporary trend, soon enough whole AWS/Google Cloud will fit into your pocket because of Moore's law and miniaturization of computers. Cloud is a money pomp and it's managed by admins and marketing people mainly, not by real computer scientists which conduct research and draw conclusions from the history.

I can recommend you to watch YouTube videos and watch people like Alan Kay (watch all the videos), Hal Abelson, Jerry Sussman and others pioneers of our industry. You should quickly notice that what we have now is a local maximum of some trends and much much more is waiting to be (re)discovered.

Hint: AWS and K8s are poor attempts to create real Object Oriented system. There will be much more like them in the future, but of a higher quality and based on some real rules, not accidental connections with HTTP messages.

> Moore's law and miniaturization of computers

But isn't that slowing down?

Yes, until there is a breakthrough and the game starts overs.
You feel depressed about the direction of the industry, but how do you feel about the direction of Java? I think Java and spring boot has improved by A LOT the last couple of years. And I enjoy that direction.

We are still running java+spring boot, even though we are moving from on-prem datacenters to GCP. We are moving from VMs to kubernetes/containers, still using java. We are using SQL, but managed CloudSQL databases from google. We are also moving to more asynchronous programming using events with google PubSub.

The developers are now responsible for setting up their databases using terraform, aiming for more DevOps. We used to throw things over the fence, but now the developers create their own infrastructure instead of relying on other teams. They create their own metrics and alerts and have a lot better insight and overview of their applications.

To me, as a java developer, I think it has grown more interesting, and I feel like I am in more control of my environment. The majority of development is still in java, the business logic is in the java. That won't go away.

I'm not sure if my comment is helpful, but I actually like the direction where we are going. Maybe you can try to find the nice parts and focus on those?

Direction of JVM, Java and the other guest languages (Kotlin and Clojure mostly) is probably the bright spot of tech right now.
I'm sorry to be negative but people who think like you is what I was referring to. I can't relate to your embracing of us being asked suddenly to do a second job that isn't software development. I don't care about the infrastructure from a setup or configuration sense. It's too much for me. Isn't it enough if I actually manage to be a pretty damn good developer? That's not easy. Why isn't that enough, unless you are the company then you'd love to have me doing the job of two people.

I do like where Java is at, that's why I hate AWS. I feel it invalidates the need for Java. Just script to the AWS engine. I could be way off, but I see AWS being what kills Java.

Maybe you're not a darn good developer, if you just want to throw whatever code over the fence. Code isn't just a PR in a vacuum, a closed ticket, another class. A good developer knows how their code runs and behaves in the real world, and cares about it.
Good point. It's maybe hard to see when you yourself aren't very good at something. Even harder when you really like doing it.
The downside of DevOps is that you now have to spend time on something that's not writing code. The upside is that you suddenly have a lot more power. You can add and remove pieces of infrastructure without having to get approval and waiting for some other "sys admin" team.

Cloud providers are very proprietary and specific in nature, which is very off-putting to me personally. Putting some abstraction over it, like terraform, makes it much less specific. It seems less like "wasted niche knowledge".

I have never used MongoDB, just watched it fail spectactularly in other teams. I don't get it. If I know my data structures, relational is obviously the right choice. If not, I won't expect any meaningful document queries either. A simple key/value store should be good, whether that's in my RDMS or something like Redis.

Go is just a fresh Java, without all the cruft. Also dumbed down, which is a bit sad, but on the other hand very quick to move around in. I don't get how anybody can stand all the crazy tooling and configuration and setup around Java, Spring, etc.

You definitely have more power, you're right. With great power comes also great responsibility, which wasn't there before. Example: instead of the experienced DB guy who was checking the logs to tell you exactly which query goes too slow and what you could do on your side to improve it (and do things on his side to scale the DB better), now you must build the knowledge to do all this properly by yourself.
I don't think it has ever been enough to JUST look at the java. You said you were pretty good at SQL, so you must think about the performance of your queries, what indexes you use and such.

You can try to improve your java performance as much as you want, but if your database can't handle the load, then you need to look at the database. In my opinion it is NOT enough to look at just the code, you need to look at all of the parts of the system.

Just declaring that you want a database instance in code, using something like terraform should not be an overwhelming thing. Most of the management would be handled by the cloud vendor, you would just need to make sure that it has enough cpu/ram for example. There are probably even easier products where you just store data with some kind of API and you don't even need to bother with the performance of the data store.

But if you just want to write your java code and not care about anything else... Then yeah, maybe the direction of the industry is not aligning with the direction you want to go.

I love relational databases. I think they are among the greatest products to come out of the entierty of computer science, ever. You're right, I do care about application performance and index tuning and query optimization. But it would make no sense to ask me to be a DBA.
What would the role of the DBA be if you are the one creating tables, tuning indexes and optimizing your queries?
I thought about how to reply to this, but database roles vary so differently from company to company, it's a bit of a rabbit hole to go down. Whether you call what I described being a DBA or not, I don't think it's reasonable that a software developer would now "own" the database and all that entails. It just so happens that the database fits nicely into being "owned" and managed in AWS. And it also may neatly obviate the need for the DBA role. Although, I think that's debatable too.
Yeah developers are now responsible for things formerly taken care by professionals in their area. The memory space i could use for better learning my framework is now used to store K8 tricks. The time I could use to fix some user reported bugs is now used to figure out Elasticsearch query parameters so it works properly over shards. No really, I can't imagine why this is such a good thing, diluting the programmer/dba/devops skills.
I don't see how your example of querying elasticsearch has anything to do with the above. I do agree that it requires the developer to at least understand the basic concepts of kubernetes, if you are running your application in kubernetes.

I rather like to think of it that certain things that was handled by other professionals are now managed or automated with cloud technology. Take Google PubSub for example, a message bus with pretty much zero operational overhead. You simply create your topic and subscriptions and it just works. Compare that to running and maintaining a system like Redis or Kafka on your on-premise hardware.

As a developer you still need to understand the interfaces of the products you are working with, regardless if it is a database, a messagebus, a REST api or kubernetes.

Ok here's the short version: as a programmer I'm also now responsible for maintaining and upgrading all that environment around my program. Which I wasn't before, a time when understanding its interfaces was enough. Can this be denied?
For managed products, upgrades are often automatic and there is almost no maintenance that needs to be done. At least that is my impression when running stuff in GCP. For example:

* CloudSQL Postgres, automatic minor/patch upgrades, they working on seamless major upgrades. Automatic disk increase. You would only need to make sure that you have enough resources in terms of CPU/Memory. * PubSub, no maintenance or updates required.

It is more work to keep java and the related dependencies up to date. We use renovatebot to help us automate things like that.

In my experience it is very easy to change and setup the managed products, I declare them in code using terraform and then I don't have to do much at all. This is what is so awesome with the cloud managed products.

If you are trying to be cloud agnostic, then you are just treating the cloud as another datacenter, and then you don't really get any of the benefits of using cloud specific managed products. Then you need a professional to keep maintaining your infrastructure.

I hate inappropriately used MongoDB, Lambda functions, and microservices. I also don't think they're "in" anymore: the pendulum has swung back towards the middle and SQL with an actual schema, code that isn't scattered all over a web UI, and monoliths are all back to being defensible choices.

Software engineering isn't just knowing the tools, I think it's also seeing the patterns. Consider a queue. It doesn't matter if you're using Kafka or SQS or a jobs table in PostgreSQL read by a monolithic application, you're still going to wrangle with similar concepts: dead-letter queues, at-least-once delivery and idempotence, updating the schema of your in-flight messages, timeouts and retries, transactional all-or-none message delivery, large replays if your consumer went down, physical capacity running out. Knowledge around these problems won't expire, although it might become more niche or less useful.

> The worst thing is, developers are embracing this AWS trend and seem to love it. No one seems to mind. Software engineers are cursed. Just when we've established a best practice and it's a solved problem, we throw it out and reinvent a new way to do it.

I don't think AWS is a particularly loved ecosystem, it's just a well bundled set of tools.

On the other hand cloud architects or whatever are like a modern day Pied Piper with so-called visionaries following them and burning money until their business runs out of runway. Once they realize they should have spent way their resources on diversifying their partnerships and creating a non shitty product instead of investing a gazillion on splitting a smelly monolith into 13 smelly parts, it is often too late.

Have a plan B at all times and you'll be able to sleep well.

When I was a kid I learned Logo and Basic and then Pascal, later C, and a bunch of other languages. In the late 1990s, there was this huge trend where a fancy 'new' language was embraced by everyone and their mother: JAVA.

I thought Java was bullshit, it's basically just some strange dialect of C running on a poorly written virtual machine. Everything you wrote was dog-slow. (I can't remember if the security problems were there from the beginning or were a 2000s thing.)

I was sure it was a passing trend and in 10, 15, 20 years it won't be there. And - compared to the great fanfare and hype of 1999 - it really did quiet down A LOT since then.

I hope this helps at least with some perspective. I agree with you that "the cloud" is a dead-end. I wish you the best of luck.

>I agree with you that "the cloud" is a dead-end.

Really? I feel like it's the inevitable meta...

Too many stakeholders, from users to companies to governments, have their interests aligned in using cloud tech, and the biggest barrier to viability for any application is bandwidth.

But I hope you're right since I would consider using some hypothetical cloud OSaaS dystopian. :p