Live data from Hacker News

Simple Systems Have Less Downtime (2020)

gkogan.co

11–20 of 220 posts

Re: Simple Systems Have Less Downtime (2020)

#11
I think a better point would be "simple systems are quicker to fix" or, more concise, "avoid unnecessary complexity". In some way, complexity allows flaws to get in, but that does not mean it's unnecessary.

Take, for example, website hosting. You can put your full page on a single server, but then you're prone to the machine going down, the disk having errors etc.. A more complex system, like Kubernetes, will be far harder to troubleshoot, but it will not go down just because one machine died.

Or, as an engineering example, take planes: They're a lot more complex than ships. Fixing them when something is wrong can take long. But that complexity is needed so what when something fails, you get to the airport instead of going through a rapid unscheduled disassembly.

Re: Simple Systems Have Less Downtime (2020)

#12
The Author generalized "fewer features lead to less downtime" to "simple systems have less downtime".

A simple system such as a hand-written web server is very likely to crash. It's very likely cannot serve many users if we don't make it serve requests concurrently. What's worse, one tiny exception in one request would bring the whole system down. It stops serving any request to any user.

A relatively complex system with a self-recovery mechanism added goes a long way compared to the former. The Erlang implementation is much more complex than "an Erlang without processes". Kubernetes is complex, and it definitely gives us less downtime than simple scripts we have written before we use Kubernetes.

The real world is chaotic. If a system needs to strive for less downtime, it needs to have some features that mimic biological creatures, instead of being idealistic simple.

Re: Simple Systems Have Less Downtime (2020)

#13

People don't go out of their way to build complex systems. What happens is that it starts simple and becomes complex as more features are added often with limitations attached e.g. time, money etc. So yes this guy migrated from Marketo to Hubspot and it was simple. But the idea it will simply remain that way is laughable.

I think anything that is growing and is new has a tendency to become complex. Simplicity is a constant balance. You have to allow end endure the complexity to get anywhere new and then re-integrate it by creating order. Such is coding and such is life haha.

Re: Simple Systems Have Less Downtime (2020)

#14

People don't go out of their way to build complex systems. What happens is that it starts simple and becomes complex as more features are added often with limitations attached e.g. time, money etc. So yes this guy migrated from Marketo to Hubspot and it was simple. But the idea it will simply remain that way is laughable.

I've yet to see something in the wild that starts simple. Usually it starts too complicated and just gets worse over time.

Re: Simple Systems Have Less Downtime (2020)

#15
It should really say "overcomplicated system tend to break more frequently".

It is not simplicity that makes for less downtime, it is unnecessary complication that does the opposite.

I spend time to complicate my applications a little bit to make sure there is no downtime, something pretty important when one of the largest banks on Earth will stop along with your application.

The simplest solutions would typically not be able to ensure no downtime operation. I need code so that I can do rolling upgrades and I need code so that my application can partition work and rebalance it reliably as cluster map changes.

The problem starts when you start overdoing it. Maybe you are expecting too much in terms of guarantees. Or you want a simple guarantee but then you duct tape to it a huge and complicated clustering solution. Now you have a lot of problems. Your team doesn't know how it works. Your team doesn't know how it fails. It is not easy to tell if you are obviously integrated the right way. And so on.

The goal, as usually, should be to "keep it simple, but not simpler than is necessary".

For example, the approach we have chosen was to get by with as little guarantees as possible implemented as simply as possible.

We decided on immutable data. We decided objects being saved as documents each with entire state of the object after each change. This costs a lot in space and processing needs, but you know what? It is fine. I work for a bank after all. The one think that costs more than space and processing power is downtime, and that's what we are trying to focus on. We know how to deal with duplicate data.

So another rule of thumb: try to find compromises in your application, use them to replace hard problems with easier problems.

Making an application super reliable is hard problem. Adding more storage space and memory is (relatively) easy one. If you can solve hard problem by replacing it with an easier one, you are winning.

Re: Simple Systems Have Less Downtime (2020)

#16
I'm an architect and I keep things simple too. The problem I have is people around me expect more complex/intricate solutions. They think simple is not sophisticated and savvy. They think the competition is ahead of our 'old, simple solutions'. I have to continually justify and explain that KISS is always the right approach.

Re: Simple Systems Have Less Downtime (2020)

#18

People don't go out of their way to build complex systems. What happens is that it starts simple and becomes complex as more features are added often with limitations attached e.g. time, money etc. So yes this guy migrated from Marketo to Hubspot and it was simple. But the idea it will simply remain that way is laughable.

While what you’re saying is, of course, fair, the other side is also true: people often choose to complex a technology “because it’s future-proof!”, while they need just a simple system. There are tons of examples: CQRS over simple databases, Hadoop while a single server suffices, or even people choosing JIRA over a simple trello board. As such, the obvious answer is “it depends”, and making the right trade-off is ra…

> a single server suffices

A genuine question that I wonder about: How does a single server protect you against someone in your DC pulling a plug by mistake or your cloud provider being unreliable? If it’s a database it seems like a huge potential for going out of business.

I guess if you are running single-server databases you better have a good backup strategy anyway, but is that a risk people and businesses just accept?

Re: Simple Systems Have Less Downtime (2020)

#19

People don't go out of their way to build complex systems. What happens is that it starts simple and becomes complex as more features are added often with limitations attached e.g. time, money etc. So yes this guy migrated from Marketo to Hubspot and it was simple. But the idea it will simply remain that way is laughable.

That's not always true. Developers like to well, develop, and so they like to implement all of these things irrespective of the fact if those things are actually needed.

Re: Simple Systems Have Less Downtime (2020)

#20
post #16

I'm an architect and I keep things simple too. The problem I have is people around me expect more complex/intricate solutions. They think simple is not sophisticated and savvy. They think the competition is ahead of our 'old, simple solutions'. I have to continually justify and explain that KISS is always the right approach.

Well, it's a trade-off, isn't it?

Complexity can result from features which pay for themselves. Complexity is not automatically always wrong.

At scale, complexity solves problems that you might not otherwise realize exist. Some of these problems are intrinsically complex, they can't be solved with a simpler solution. Not without "simple" organically growing into a much worse mess than the dominant complex solution that was designed by acknowledging complexity from the start.

But what I want to respond to is your trying to explain that "KISS is always the right approach". Rules of thumb like these are cheap.

They cause people to apply the same patterns regardless of the situation. Dispensing folk wisdom indiscriminately only serves to stop all thought and analysis.

Zealous rule-based engineering is the deathrattle of good systems design, and it makes me ill at ease.

Post reply on HN