Live data from Hacker News

Steel Threads are a powerful but obscure software design approach

rubick.com

41–50 of 89 posts

Re: Steel Threads are a powerful but obscure software design approach

#41
The author states Wikipedia removed the term in 2013 because it's not notable.

I'll join others here by saying I haven't heard of it as well and it would seem "tracer bullet" did just fine in The Pragmatic Programmer published much earlier.

The author doesn't state who came up with the term "steel thread" and I'm suspecting it was the author.

Re: Steel Threads are a powerful but obscure software design approach

#42
Microsoft calls this the strangler fig pattern and recommends it for large migrations: https://martinfowler.com/bliki/StranglerFigApplication.html

They make it somewhat easy to do using Yet Another Reverse Proxy (YARP). I’m in the middle of it for a .NET 4 to 6 migration. The challenge for me is that it introduces complexity. Developers have to think “do I fix this bug in v1 code or v2?” We have to host two backends instead of one. They both touch the same db, so that adds complexity- what if v2 does something in data that breaks v1? All solvable problems but just thought I’d share a from the trenches take. I do still think it is the right approach for this scenario.

Re: Steel Threads are a powerful but obscure software design approach

#43

As an ex-machinist this thread title really threw me!

I always wonder how these sorts of things happen. MBA: "we have a new technique, you'll love it, it's called a 'steel thread'" "So like, on a bolt?" "..." "Or do you mean more like,,, a wire?" "...Steel. Thread." "Excellent sir. I shall be adding the term 'steel thread' to my next quarterly report. Give my best to the missus."

“Marketing driven development”

Re: Steel Threads are a powerful but obscure software design approach

#44
post #14

Earlier quoted context omitted.

As much as I am a fan of monoliths, too many configuration parameters will land you in a world of hurt. You may start with 20 options but people will demand more and more options if you don't stop them very early. Those options will have side effects that other options are supposed to fix and those will also have side effects and in the end you have 1000 options, all doing various things nobody knows. The worst part…

This is not correct. Not all the options are equal. It's possible to soundly define, verify and instantiate big modular contexts. https://github.com/7mind/izumi/

Things that are possible are frequently not the default condition.

Re: Steel Threads are a powerful but obscure software design approach

#45
A small tweak to the "old style" plan that I'd look at is running the new service in parallel with the old but not actually taking customer facing action. For example, send all writes to the new microservice when the write happens in the monolith.

Pros: Gives a real work indicator of performance with very low risk. Data could be truncated and then backfilled before the final release.

Cons: not always possible depending on complexity or feature. Requires implementing the parallel path which carries some risk in itself.

Re: Steel Threads are a powerful but obscure software design approach

#46
post #4

This reminds me of something John Carmack tweeted once (can't find the tweet). In the tweet, he said that when coding, he'd start by the smallest possible PoC, and code it entirely front to back. That'd give the general structure, and then he'd build upon that. (this is what I remember of it fwiw). I do this all the time too, which I think is a vastly superior approach to TDD, which assumes how an API is going to be…

Similar here. I pick the one thing the system depends on, I call it ‘hello world’, and implement it with no UI at all and one command line test. The test exists to prove to myself and my team that it works, and know when it breaks, not to demonstrate an API. You can call it TDD or not.

So I when someone suggests “we can build X” I say yes but first we need to build “hello world”. The discussion about what constitutes Hello World is often valuable, but often ends up with examples like the article, eg "can we write a message and the recipient gets it?" "can we do one trade?" etc. These sometimes seems like trivial goals but implementing them can be surprising.

Re: Steel Threads are a powerful but obscure software design approach

#47

The example in the article doesn't make sense to me. It basically says "You want to switch out a piece of a monolith to a new service, you do it with feature flags etc. That's hard." Which is true. But then it says "Steel Threads is better. Instead of switching out a part of your monolith, you... switch out a part of your monolith but it's a smaller part. That's not as hard". Which is true but isn't that the same thi…

Agree, when I'm looking to pull out a service I'm often looking for state boundaries. Is there some part of state or a data model which is separable? If so I can abstract around that and pull it out. If I try to pull out something smaller then I end up in trying to run a service with a split-brain backing datastore, which is far more problematic IME.

Re: Steel Threads are a powerful but obscure software design approach

#50
Found it on C2 wiki. It's not exactly the same definition as in the linked article though.

  Also, referred to as a "steel thread". Runs the length of the application architecture (front-to-back, top-to-bottom, whatever) of what you are building. Each new top-to-bottom feature is a new thread. Steel threads wrapped together incrementally form a cable stronger than an equivalent diameter solid cable extruded all at once. Thread akin to string, as in string testing. - NormanECarpenter
https://wiki.c2.com/?SpikeSolution (too bad the c2.wiki has modernized the UI, its now almost unusable)
Post reply on HN