🍩 Doughnut Reader 🍩

rglullis

27 comments

11 days ago

I have very tired of these analogies and pop cultural programming anecdotes.

This is another one.

There is no place in any professional field where you get away with poor choices.

Why call it a rocket stage ? Why not just call it exactly what it is - very bad judgement, very poor understanding and simply immature pop cultural choices.

No one in the right professional mind are making such choices. It might happen other places. But not in a professional setting.

But if it does get rid of those people. They are not good enough.

danielovichdk

11 days ago

>Why call it a rocket stage ? Why not just call it exactly what it is - very bad judgement, very poor understanding and simply immature pop cultural choices.

You've misunderstood the author's point. It's not about "bad judgement". The extra "rocket stage" is just another metaphor about inevitable "tradeoffs" of simplicity vs complexity.

It's a rewriting of the common adage: Every new solution to an old problem also creates a new set of problems. That's just the tautology part. The question is if you'd rather have the "new problems" instead of the "old problems". That's the cost-benefit analysis part.

E.g. Old car engines carburetors wastes too much gas. New Solution uses more complicated fuel injectors with oxygen sensors and onboard computers to dynamically control the fuel mixture. But now your new solution also created new problems of "oxygen sensors go bad that you have to replace" and "add another supply-chain dependency on computer chips" to assemble completed cars. Ok, got it... we'd still rather have the new problems of replacing oxygen sensors and adding the extra complexity of the ECU computers to gain fuel efficiency.

That's what the author is saying with his last sentence about fully understanding if the extra complexity is worth the cost: >"Maybe it's what you need to get where you want to go, but be clear about the extra weight, operational cost, engineering overheard, mental overhead."

jasode

11 days ago

We should definitely stop using metaphors involving things we don't understand (rocket design) to explain things we might already understand (software development).

hnthrow289570

11 days ago

We understand almost nothing, so this is like throwing the baby out with the bathwater.

I don't think the cost/benefit of a second stage are hard to understand

vitiral

11 days ago

I'd be very worried if people who write software for a living actually believe they understand rockets more than software...

... and if not, why the analogy? Aren't analogies used when you want to explain something that people are relatively unfamiliar with, using something they are more familiar with?

hnfong

11 days ago

I typically use analogies to make something that is abstract more concrete.

vitiral

5 days ago

Some poor choices aren’t obvious at first without the right intuition or experience. I think these articles are attempting to describe that in other words.

grugagag

11 days ago

[deleted]

11 days ago

It's more lack of "second thoughts" skills and possibly lack of State of Art and Decision Records; it is impossible to learn from failure if no trace exist or no one knows who did the decision.

hervem

10 days ago

I agree, the analogy is shaky.

Adding extra components to you solution, like Kafka, adds complexity, overhead, maintenance etc. While adding an extra rocket stages reduces load, because you get rid of the extra rocket element as soon as it has been used. It will make the rocket lightweight once it is in final orbit.

The intention is good, but the analogy isn't right, it's actually the opposite :)

I never like analogies in decision making, especially when done by management who don't understand technical details of a solution. "Sure we need Kafka, we can't send a tank ship into space can we?"

FrankyHollywood

11 days ago

> the analogy is shaky.

The current state of software development is more like "Every new software is born with its own personal windmill tied to its neck for improved aerodynamics and efficiency. When it takes off you will really see it fly."

RunSet

11 days ago

I'm not sure I understand the analogy. In rockets, you can either add another stage, or you can keep the number of stages the same and make your engines bigger. The former allows you to shed weight somewhere along the launch while the latter does not. In either case, I'm not sure how that translates to software architecture.

spuz

11 days ago

It's a bit of a loose analogy, but perhaps useful all the same. It's based around his rocketry "weight adds weight" no free lunch warning. Adding an extra expendable stage will get you further, but better be sure you need it since the added weight and complexity comes at a cost that the whole rocket will have to bear.

The software equivalent is adding infrastructure components to your project because on one level they help you towards the goal of what you are trying to build, but "no free lunch" applies here too, and there is a downside in terms of overall complexity, debugging times, build times, maintenance cost, etc.

Maybe "no free lunch" and/or "technical debt" already express it, and we don't need a new "weight adds weight" way to describe it, although there is something about the tautological inevitability of it that is a valuable reminder.

HarHarVeryFunny

11 days ago

I think the point is that a staged rocket is clearly "better" in theory, but adds a step-change in complexity and overhead that might not actually be required. It adds a non-zero chance that the mission fails catastrophically due to a defect in the staging system at a critical moment, or the design process overtakes the budget and the whole thing is scrapped. In either case an N-1 stage rocket may have done the job. Doubly so if you are experts already in single-stage rocketry, but lack staged rocket design and execution competence.

Akin's LawsÂą of Spacecraft Design have a few relevant ones:

> 13. Design is based on requirements. There's no justification for designing something one bit "better" than the requirements dictate.

This is not the only one that's relevant. Also 15, 27, 33, 34, 36, 36, 38, 44, and, if you substitute "distributed architecture" for "launch vehicle":

> 39. Any exploration program which "just happens" to include a new launch vehicle is, de facto, a launch vehicle program.

Of course, if a staged design is actually required (and not just because your engineers need to buff their CVs so they can jump out when the project fails under its own weight):

> 41. There's never enough time to do it right, but somehow, there's always enough time to do it over.

Âą: https://spacecraft.ssl.umd.edu/akins_laws.html

gravescale

11 days ago

I would call it a “leaky analogy” but any analogy can be picked apart. The overall point is sound IMO. Be aware of the operational load you’re signing your team up for when choosing your architecture. Seems like commonly sense but is often overlooked.

rco8786

11 days ago

A couple generous interpretations:

Sometimes "throwaway work" is still worth doing. Maybe you can spend one month hacking an important feature into the old architecture, to deliver it early while investing 6+ months of work into The Right Way. Deprecating the first version is like dropping a rocket stage.

Adding architectural complexity leads to growth in developer headcount. This requires more support staff, and more communication complexity. The growth follows a superlinear trend, as does the fuel requirement for larger rockets.

alanbernstein

11 days ago

The analogy seems more clear to me in IT operations.

Let’s say we have one server running our stuff, and it’s too slow.

One option is, upgrade the CPUs or add more RAM. This seems analogous to “build a bigger engine” in your example. There’s no added complexity (well, mostly, maybe you run into NUMA issues or something).

But some kinds of upgrades are more costly or complex than they appear on the surface.

If we want to add 1 TB of usable storage space, at the physical level that means multiple drives for redundancy, keeping multiple copies of the data for backup, keeping replicated copies of data that are ready to turn on at any moment, and so on. So in the developer’s mind we think “add a single 1 TB drive”, but in reality it might take adding 15-20 drives in numerous servers to accomplish this.

The same thing happens when going from a single physical server to multiple. With a single server you can scale vertically. But horizontal scaling is a different type of complexity, now having to think not only about server redundancy, but redundancy at the network layer, now you need redundant network switches, and it all needs to be configured right to handle any part in the communication path failing (server down, server network card down, server network card port down, bad network cable, network switch down, network switch port down), and all of those require some configuration and protocols, and maybe you’re not familiar with VRRP or LACP on the network switches and also how those interact with VMware load balancing and failover, so now you need a VMware person and a Cisco person and that’s not even considering how you handle split brain scenarios where both servers are still running but can’t talk to each other due to a network partition.

And that’s all a very different kind of upgrade than slapping more RAM sticks in the server and keep rolling.

halfcat

11 days ago

Excellent point

(Chin stroke): I think the key metric for insights on the web isn't whether they're accurate, but whether you can sound smart when repeating it to someone else.

(Not saying I approve of this)

pentaphobe

11 days ago

Anyone with some KSP hours tracked will understand.

Thinking about my poor heavyweight rocket that barely makes it to orbit and when I compare them to the sleek elegant designs by Scott Manley that makes it to Mun and back and. Sigh.

fifilura

11 days ago

Most importantly, what's the rocket equation of software?

gpderetta

11 days ago

While I don't have a good way to articulate it, it does seem to me that the modern software development style which involves an explosion in complexity, either in terms of dependencies or infrastructure or both, in order to make developer time go a little further, and the ensuing explosion in expertise required to maintain, secure, and evolve the system... all of that does strike me as reminiscent of the rocket equation. When I find myself spending more time dealing with patching dependencies, or screws coming loose somewhere in the build system, or dealing with performance idiosyncracies of some hot new database, or the peculiarities of some middleware messaging system, or the automated tests needing maintenance, or dealing with transitioning off a now-unmaintained technology, when I find myself spending so much time doing such things that making any actual change in business logic takes orders of magnitude more effort than it should, I do very much feel like all the engineering effort is just fuel to lift fuel to lift fuel.

How to articulate that in a pithy way? I do feel that when you have a lot of technologies interacting on a project, even if they all worked well together initially, in five or ten years time the whole thing does have a very rocket equation like punishing curve for return on maintenance effort. Perhaps something like "Over time, maintenance effort approaches exponential scaling with the number of interacting technologies."

Ah! I got it. What's going on is that external dependencies are a source of chaos, as maintenance and security issues and expertise requirements flow from that project into yours. So...

"Dependencies cause multiplicative bit rot."

Dove

11 days ago

Adding complexity to a late project makes it later and less maintainable.

Brooks v2

dsr_

11 days ago

I don’t love the analogy but I understand the point being made. That said, I might agree with something like microservices or k8s adding a lot of overhead, but at this point, I don’t really agree with single page apps being in the same category. Someone who is comfortable with React can spin up and deploy an app within minutes. The hosting infrastructure is basically the same as deploying vanilla HTML, the hard parts are abstracted away and the vast majority of issues you’ll come across have been solved before on some web forum. This doesn’t mean you can’t write bad react, but for most use cases, it’s not any harder than writing pure html/css/js (and id argue that the popularity of React is due to it being much easier).

dtnewman

11 days ago

There's a point to the referenced comment, but more interesting to me is that there was a link in a comment there to https://www.asyncapi.com which is something I wish existed about 7 years ago, because it's a spec for everything that we created for a system that needed this and tooling.

rswail

11 days ago

I rarely use analogies in software architecture anymore. They rarely add clarity, and most of the difficulty already comes from people being able to directly discuss the motivation and consequence of a design decision.

debo_

11 days ago

Looking forward to managers using this buzzword for the next 3 years

ryanmcbride

11 days ago

[deleted]

11 days ago