Michael Bromley

Michael Bromley

@michlbrmly.dev

Creator of vendure.io. Open source and stuff.

499 followers253 following197 posts

Just got the last part of my mini pedal board. It's literally everything I need: octaver, Rat-style distortion, delay/reverb, looper/drum machine. With this combination I can do all music.

I think back to the hours of my life spent painfully trying to figure out how to make JavaScript work. Copy-pasting from random forum posts. This was even before Stack Overflow (RIP). Yes I'm that old. And I compare it to the velocity I now have using AI tooling.

It fills me with both dismay and excitement πŸ˜‚ Dismay at the "lost" hours, days, weeks. Excitement at the realization that during that process I learned deep fundamentals that newcomers may now have little incentive or opportunity to master.

Sometimes I hear that it was a mistake to build @vendure.io on top of GraphQL. "Too complex", "Can't be cached", "Poor performance", "It was all hype" Yes, every technology has its tradeoffs. I'm keenly aware. There *are* some aspects you need to be mindful of when working with GraphQL.

View full thread

And with our new Dashboard, we're leveraging GraphQL to help you build custom UI with speed and productivity you won't find anywhere else. First post contains a clip of what it looks like to build a fully type-safe list view.

Sometimes I hear that it was a mistake to build @vendure.io on top of GraphQL. "Too complex", "Can't be cached", "Poor performance", "It was all hype" Yes, every technology has its tradeoffs. I'm keenly aware. There *are* some aspects you need to be mindful of when working with GraphQL.

But after seven years, I'm still glad we chose GraphQL. The unmatched DX of Vendure would simply not be possible without it: - Type safety from backend to frontend - Extend any response with custom fields - Dynamic, type-safe sort & filter on all list queries

View full thread

βž” Automatic type safety from GraphQL _without_ a codegen step βž” Auto-generated list & detail view based on your GraphQL queries βž” Dynamic components that adapt to the exact data types in your custom schema

Look, I've been around a while & remember when we used to bundle with Grunt, then Gulp, then Webpack. So isn't Vite just an incremental take on what has gone before? No - Vite has something that makes it magical. An absolutely sublime plugin API that feel like you can build *anything* with it.

In our case, we're using it to power our brand-new React-based dashboard. I've gone pretty deep building out some very cool Vite plugins that really make it feel magical to build UI extensions to your Vendure app.

There's one lesson that has taken me years to *really* learn in software development: Simplicity should be prized above all other things. Simple code. Simple logic. Simple dependencies. Simple deployments.

View full thread

It's all fun and games until, 6 months later, you need to debug something and proceed to spend 5 hours figuring out what the hell is even supposed to be happening here. This message is brought to you by 7 years of hard-won lessons building @vendure.io

I don't always get this perfectly right, still. But I can promise you that for Vendure developers I am fighting to bring simplicity to the often complex and over-engineered world of enterprise commerce.

There's one lesson that has taken me years to *really* learn in software development: Simplicity should be prized above all other things. Simple code. Simple logic. Simple dependencies. Simple deployments.

View full thread

But whenever you get the urge to bound over to your colleague to explain your incredibly clever solution, and get a pat on the head and a "good dev!"... "look, by using partial application and meta-programming we can dynamically construct a pipeline of operations that..."

Could it have been a for loop? Could it? If it could have been a for loop, please write a for loop. This manifests in devops as things like ridiculously complex constellations of services and (gasp) microservices to power an app that could have run on a consumer pc.

There's one lesson that has taken me years to *really* learn in software development: Simplicity should be prized above all other things. Simple code. Simple logic. Simple dependencies. Simple deployments.

Every developer goes through that phase where they get drunk on their own mastery over complexity. On their own damn cleverness. I most definitely have been there! And yes, some problems contain *inherent* complexity.

Michael Bromley reposted

𝐍𝐨𝐭 𝐞𝐯𝐞𝐫𝐲𝐭𝐑𝐒𝐧𝐠 𝐒𝐧 𝐭𝐞𝐜𝐑 𝐧𝐞𝐞𝐝𝐬 𝐚 π›πšπ­π­π₯𝐞. @michlbrmly.dev reminded us at HalfStack Vienna that β€œit depends” is a valid answer ✌️ Watch his talk: youtu.be/WBpzS36-eIc Submit your CfP for Vienna 2025! πŸ”— halfstackconf.com/vienna #TechWithoutTribalism #HalfStackEvents

youtu.beYou Aren't Gonna Need It...Until You Are?YouTube video by HalfStack Events

Achievement unlocked: I actually started a conversation with a stranger in Mandarin while waiting with my kids at a doctors office. It was very, very basic but we managed to make it work πŸ˜‚

Weekend coding project with my kid: βš”οΈ Rome: Total Vibes βš”οΈ Mostly built by Cursor with a few manual interventions. Features: - Multiple factions & units - Ranged & melee combat - Tile-based map - Perlin noise-based elevation - Elevation-based range & speed buffs - Enemy AI which is pretty hard!