Live data from Hacker News

Faster, cheaper, and better: A story of breaking a monolith

zepworks.com

41–48 of 48 posts

Re: Faster, cheaper, and better: A story of breaking a monolith

#41

Writing new code is faster than understanding existing code. Different teams should have enough room to not step on each other toes. Soft boundaries tend to be overruled over time, because of human laziness.

I’m not so sure, I’d rather start from what is there, understand it and go from there.

Sure, if you start over you may we’ll get there faster but you’ll probably repeats some of the same mistakes all over again.

Re: Faster, cheaper, and better: A story of breaking a monolith

#42
post #41

Writing new code is faster than understanding existing code. Different teams should have enough room to not step on each other toes. Soft boundaries tend to be overruled over time, because of human laziness.

I’m not so sure, I’d rather start from what is there, understand it and go from there. Sure, if you start over you may we’ll get there faster but you’ll probably repeats some of the same mistakes all over again.

I think the temptation to "rewrite the whole thing" is often strong with a large legacy project, and often doesn't pan out as well as it seems because while it is effective at eliminating a lot of the cruft and architectural missteps of the legacy codebase, it also means throwing out all of the subtle behaviors and edge-case-handling which has been built up over years of iteration.

I am a proponent of the disposable-code philosophy though: no system should be considered "off limits", and a healthy codebase should probably be completely rewritten every couple of years. It should just be done incrementally, in a modular way in most cases rather than throwing out the whole thing and starting again.

Re: Faster, cheaper, and better: A story of breaking a monolith

#43

Why is microservices so much more popular right now than, say, distributed processing via the actor model? It feels like splitting things up with HTTP boundaries is a lot of work, less flexible and precludes a lot of re-use. Is it just because of advances in tooling lately like Kubernetes and docker?

Conceptually microservices is about building loosely-coupled components. Client agnostic interfaces are a part of that, but using HTTP is just an implementation detail.

HTTP makes sense from the standpoint that if you want to have a lot of flexibility over how and where your services are run, they can be addressed the same way whether they're running on one box in your living room or distributed across several data centers.

Re: Faster, cheaper, and better: A story of breaking a monolith

#44

Earlier quoted context omitted.

Not sure if I agree with you regarding the agile part. If each team owns their "micro-service", then they can have their own "sprints".

What is the difference between each team owning a microservice and owning a part of the monolith? There is common release process, but with proper infra in place, that shouldn't be a problem.

It all comes down to coordination and regression, which are quite complex in monoliths.

Suppose you'd like to push code change to production for your monolith - how do you know that someone else's change 1) is ready to to production together with yours 2) does not affect your module. Typically these can't be answered easily - and so release process is converted to manual testing and scheduled (and often slow) releases.

Re: Faster, cheaper, and better: A story of breaking a monolith

#45

Earlier quoted context omitted.

How many engineers do you have and what's your growth in manpower like?

Our entire product, engineering, data science, design org is around 80-90. Engineering is about 50-65% of that. But search/merchandising is a small fraction of the team. We have 2 dedicated backend engineers on the search team. We are growing rapidly. We are aiming to double the size of the eng org in the next 8 months.

Cool, thanks for sharing. So is your micro-service architecture you described in your article for the 2 engineers or the 40? Asking because 40+ doubling to 80+ seems like a great fit for Micro-services, but 2 people, eh, not so much, IMO.

Re: Faster, cheaper, and better: A story of breaking a monolith

#46
post #26

Earlier quoted context omitted.

How is it easier to on-board new engineers? You mentioned but did not explain this point.

Easier to on-board in the sense of limiting what new engineers can see, only giving them smaller pieces of access. Otherwise it's probably the opposite, takes a lot longer for new engineers to understand the full system. Perhaps even reduces the bus factor, since less people understand all the moving parts.

That can be done with libraries.

Re: Faster, cheaper, and better: A story of breaking a monolith

#47
post #26

Earlier quoted context omitted.

Easier to on-board in the sense of limiting what new engineers can see, only giving them smaller pieces of access. Otherwise it's probably the opposite, takes a lot longer for new engineers to understand the full system. Perhaps even reduces the bus factor, since less people understand all the moving parts.

That can be done with libraries.

We do use libraries as much as possible. However we avoid putting business logic into libraries.

Re: Faster, cheaper, and better: A story of breaking a monolith

#48
post #17

Earlier quoted context omitted.

I do not disagree with your comment. As I mentioned in the article the main reasons to break into micro-services are: 1. Independent releases 2. Easier for on-boarding new engineers 3. Scale micro-services independently The rest of the article is about how to use the breakout opportunity to make major changes to the code and the data-structure. The goal is for the users of the service to have an aha moment of "Search…

Microservices are almost completely opposed to agile development. They require a strong architecture before implementation and are much harder to reconfigure regardless of versioning. The running system is also hard to manage.

I think the only reason it might be hostile to agile is if your interface keeps changing (api other things contact it with, or what it contacts others via)

But if those things are constantly in flux, it really isn't a good candidate for splitting into a microservice in the first place.

Post reply on HN