Ask HN: Is it just me, or is software development crazy
I spent the better part of the past decade+ pushing for more microservice approaches. Breaking things much more apart than they had been. Embracing event driven approaches.
Now, computing power has caught up with the scale that most systems actually need. It's no longer necessary to scale an app to hundreds of servers. We have servers that can run hundreds of simultaneous threads. We have languages like rust that give incredible performance with a low overhead.
It's time to take a half a step back and think about the complexity we are creating and the cost those systems will be to maintain a decade down the line.
Make things that are easier to reason with. Code that is easy to reason with and replace is the code that will run for decades.
I'd it just me, or is anyone else struggling to advocate for balance? Is it just me, as I'm in the middle of a job search as everything is shifting where I feel like I've progressed past?
49 comments
[ 465 ms ] story [ 4016 ms ] threadIt always seemed to me that you should standardize absolutely everything you can in a microservice architecture so that somebody who is working on microservice 7 can switch to microservice 35 and not have to learn a different build system, different web server, different system for loading configuration, connecting to a database and similar details. Not to say there isn't a good reason to use more than one language in some case (e.g. Python for training an ML model, Java for everything else.)
It was trivial then to supply the company with packages that made communication between services as simple as throwing a pojo over the fence. This was simplified again with messaging protocols like protobuf.
Just to add some infrared to an already colorful description of “how we got here”.
More RDBMS again over the likes of Dynamo
If I already have a job or a comfortable money buffer, I wouldn’t join a software company with a stack I don’t appreciate.
I hate to be that guy, but there is 1 silver bullet. Erlang. Whether you are writing code for a cluster of machines or a single node, the developer experience is the same.
It feels like this is working against me in some interviews and for me in others.
Can't wait for this to be cool again.
You’re imagining a continuous distribution that doesn’t exist.
I've had a pretty good history of seeing shifts in technique and technology over time. Usually advocating a couple years ahead of broader adoption.
Being an advocate for change can be frustrating in and off itself. Especially when that change being advocated is in some regards a return closer to a previous approach.
I've been an early adopter several times. I've also resisted some shifts along the way. It's not always about change right now, but getting thoughts out in the wild.
Nothing about that definition tells us anything about the variance. It could be imperceptibly small.
> Unless OP is brash or arrogant when sharing ideas with the team/management, there is not much to attribute to having a big ego here
The OP just claimed to be ahead of the curve, to the team of people reading it on HN. I say that's pretty brash and arrogant.
> having opinions about the direction would suggest OP is a good engineer/developer/leader/whatever.
Opinions, which are common, are not strong evidence of quality (in my opinion)
I agree 100%, and, apparently many others did :
https://en.wikipedia.org/wiki/KISS_principle
When I started out programming in the 90s the KISS principle was mentioned, but I don't hear it so much these days. Maybe we all ought to start talking about it more.
Having been a developer for ages, ridiculous over-complexity of software has always been a problem. It comes and goes I think.
It could be just you. Perhaps you're so far ahead of the curve that it will take years for the rest of us to catch up, and by then you'll have moved on again.
The older I get, the more I advocate for KISS over any specific approach.
As I mature, I realize that intelligence != complexity, and more often than not, a simpler approach is harder to design and much better in the long run.
Often simple is a lot of work (often times more than complex work). Easy work often just adds quick wins at the cost of tech-debt or unseen complexity.
It is tempting to take the easy path, or allow complexity to grow as systems evolve. Simplicity usually requires a conscious effort and deliberate design work to achieve.
Other people are not so lucky to have your experience and so they make bad decisions. You can fix this, but it means you have to give up 'doing' and become an evangelist for your beliefs.
Also like many before you, that's a personal choice and might not be a good fit for you. Only you can say.
HTMX, Rust and even Go is pretty hard though as current points of interest. Let alone other paradigm shifts along the way.
Don't get me wrong, I'll work with things in place and don't generally advocate to replace working systems. It's more about green or forward looking projects.
Or something like that
[1] Even if it reaches faster than speed of light, it may not be accepted or acted upon immediately. The analogy kinda falters here, but hopefully you get the point.
[2] perhaps "greatest" should be replaced with the word "popular" or "trendy"
It's just one particular interview yesterday and the feedback rubbed me the wrong way.
In the end, they are wanting to move to Los of micro services with a Kafka event bus... And my talking about mini monoliths seemed antithetical to that.
I don't even have a problem with micro services... I have experienced problems with lots of micro services. That being the orchestration complexity and difficulty reading with too many services.
So, my opinion has shifted with time and experience. As it generally does and has.
There are similar ways to get an application that deals with millions of users today. And I mean literally less than 10 million at a more than optimistic peak for the domain.
It would be unfortunate, but not unheard of, for someone to reject someone because their world view doesn't match someone else's, even if it's not a personal attack on them and instead just a technical discussion based on experience and presented with context and reasoning.
People are funny and often irrational. Can't please everyone, I suppose. Hopefully you'll find something where your experience and suggestions are met with an open mind.
Someone else's decades of experience could lead to opinions that are the polar opposite of yours and be equally valid. You may have had "wrong" experiences and just got lucky that things worked out ok in the end - who is to know?
My advice would be, if you are interviewing, show humility - don't show ego.
Are you getting paid for this type of decision leading to your frustration ?
Are you applying to correct role ?
I mainly feel that the scope of a developer’s responsibilities is constantly growing and it’s becoming too much.
I started doing front-end ~20 years ago. At that time we got a psd file, cut it into pieces and created a clickable mock-up. Maybe you’d need to loop through some php of a templating language to make it more dynamic but the logic resided in the backend.
Today I’m still responsible for converting that design, but it’s no longer a clickable mock-up, it’s now an application with its own state and logic that needs to be managed. We now have auth in the client so OAuth comes into play as well.
Instead of creating an index.htm and style.css we npm init which throws cryptic errors about mismatched dependencies, use a bundler, typescript, eslint, … all with their own config. It’s crazy to juggle all this config he’ll.
We used to upload our files to an ftp and called it a day. Now I have to setup a CI/CD, configure our AWS setup and it should all happen in one sprint.
As a React developer it’s also assumed that you know React Native. So you don’t only need to manage node, npm, … you’re now managing Xcode, Android Studio and the entire ecosystem that comes with it. How can you possibly build something of quality under these circumstances?
So yes, we should take a step back and look at the complexity we’re creating. Or at least look into splitting up that complexity into more different roles so that a front-end developer can do front-end again.
I think that spoke things in the horizon are interesting in terms of hybrid app tools from next, next, astro, Blazor and others.
I also find HTMX pretty compelling. I still like React a lot though.
I haven't heard anyone talking about new, safe ways to do threading to avoid those problems. Nor have I heard anyone talking about how to constrain individual parts of a monolith so that it can be reasoned about in any way other than a big ball of goo with potentially magical behaviors.
I'm also somewhat concerned that GraphQL is becoming the new monolith. Or at the very least, the new single point of failure.
So . . . I, for one, don't think "balance" is moving back to more tightly coupled code. And I worry that we don't know where to go from here so we'll revert to yesterday's problems (new again!).
Of course properly using mutexes and locking can help, so can serially shared state where state is mutated by a single process with request/response. Or you can use something like Nude, where there's only a single language execution thread. Most can leverage an RDBMS as the source of truth for state.
Tighter coupling doesn't mean ignoring ways to reduce certain risks and complexity.
A more monolithic code base doesn't have to be muddy.
As to the smaller services, what happens when you have literally hundreds of smaller services to orchestrate? Is that really reasonable for an application that will never have even a million users?
It comes down to balance and simplicity over complexity.
Micro services don't remove complexity, they only shift it. And if the same people are responsible it becomes more to try to reason with.
- the world is full of too many coders writing too much code
- most business logic should be in the database
- I blame the Apple II for the ORM quagmire
- I also blame it for the gender disparity in tech
- tech is littered with the tombstones of ideas that were ahead of their time at their time and still are today
- XML is one of them
- so is XSLT