The more time I spend in software development, the more I feel like everything hinges on architecture that is flexible in the face of new understanding about the domain. Too much architecture too soon means discovery slows down. Too little later on and the system can’t evolve.
Trying to do TDD without a firm grasp of architecture patterns is like building your own straight jacket. But then later, under testing the architecture means you’ll never be truly stable.
It’s a constant balancing act between over architecting and under architecting. The answers change with the code base, and with the teams, and ultimately ideally with the richness of our understanding of the domain were operating in.
Knowing what patterns exist, why they can be useful, and how to apply them situationally are all parts of having good “taste” in software design. Which trade offs are we making and why?
All of that is software architecture. I’m spending a lot of time learning how to translate the ideas of what a product can be into essential capabilities the architecture must support. And balance not overthinking it vs building a boat that won’t float.
Beware falling into the trap of saying X is always bad. It’s always situational. Our front end is complex - because the domain is, and making the richness of interactions easy and smooth is everything.
So while I wouldn’t always reach for an event bus - in this case there are 3, each with a slightly different role to play. Websocket pushing events from the outside world. Internal bus tracking instanced stores for application state. Component bus for signaling between UI.
Taken alone, that’s too many. In context of the domain and the problem - I suspect it’s just right. Good architecture is about the domain, ease of change, and ease of implementation, probably in that order.
But we didn’t start out that way. We evolved to it over time, as our understanding of the domain increased.
• • •
Missing some Tweet in this thread? You can try to
force a refresh
This misses the point wildly. There aren’t different understandings of what open source means. There are people who want what they want. If they still can get it, they’re usually fine with whatever.
When you think you get to define what an important software term means, because you want to retain an advantage - I don’t care what you believe. Just because you say the sky is purple doesn’t make it so. Gross. Do better, @graylog2.
To be clear - like it or not, open source is defined by OSI. As a community we rely on it. We need it, so we can trust what liberties it grants. I’m on the side of there being a more open discussion - but just saying “we think it’s okay” is some bullshit.
You know it’s not. You wanted the non-compete part of the license more than you cared about it being open source. Own that shit. Stand up for your principles.
@webframp Ok! Basics first. F1 is a constructors sport. Each team must build its own car, from scratch. They can use listed parts, outsource some, but the design and build has to be done in house by the team.
@webframp That means the team often can build the car around the driver. They give feedback on how it feels and behaves, and the teams change and adapt over time. It also means each teams car is unique to the team.
@webframp The cars themselves have no driver aides allowed. No power steering. No traction control. If you’ve ever driven a rear wheel drive sports car with no assists, I’ll tell you: it’s difficult. You have to pay maximum attention all the time. They’re absolute monster cars.
There is a market opportunity for an alternative to k8s. You won’t “beat” it, but you don’t have to. You just have to decide to compete. Right now nobody even tries. Nomad is closest, and even their marketing is complimentary at heart.
To be clear - I’m not building one
Also, it’s not because k8s is bad. It’s because it’s such a success, the groundwork for the market is laid. People don’t question its place in the stack. They do question the implementation complexity. Operability.
First - doing large scale collaborative state transitions is really hard if you want it to feel fast. The number of different factors at play range from the low-level wire protocol to the high level application design. It all has to be right, or you get very hard bugs.
Until now, I suspect most everyone wound up taking either the Operational Transform route or the CRDT route. What Microsoft did here was cleverly different (unique? certainly to me, and I've done a lot of reading and implementing here)
For people wondering if switching to the red hat model has worked for chef - super yes. It’s for others to give details, but I wouldn’t do the open core model again, if I wasn’t building on an existing free software island.
Selling the whole product, and having the whole product be open source, and having third party produced builds, collaborating together, it’s better on, I suspect, every angle.
It’s less clear you could begin this way, but I think you could. If we had, it would’ve been less of a shock to parts of the chef community. Not hearing a single conversation about lack of differentiation is like being in a hot tub, if you lived 13 years of it.