All posts tagged “FOSS”

Shunning Frameworks

I’ve used frameworks for about every language I’ve used throughout my entire career. I’ve always picked up a language and a framework at the same time – using the framework as a guide for what is possible, what the best practices are, and how to write idiomatic code. Quality, of course, varies by framework.

Over time, I’ve started to realize that frameworks provide magic, and there are secret incantations to bring out that magic. I can usually jump into the source and figure out what’s going on, but this detracts from developer velocity. And this makes the framework less appealing; I start to feel that I’m using a language on top of another language which quickly leads to a halt in developer velocity due to the law of leaky abstractions.

The law of leaky abstractions dictates that as abstraction complexity increases, the likelihood of exposing the underlying complexity also increases. Most modern frameworks allow for the customization of abstractions, allowing you to plug any leak. But there is always that one case the framework doesn’t cover and when you’re the only one with that problem, you really have to get your hands dirty.

I no longer use frameworks. Or I should say I build custom frameworks for the problem I’m trying to solve. I do this by piecing together libraries, which of course have their own leaky abstractions, but they are not usually monolithic. And if there truly is a leak and nobody has ever had the same problem, I’ll fix it and contribute back to the community. Actually, if nobody has ever had the same problem, I’m usually doing it wrong.

Inspired by this nice post over here – Stop Learning Frameworks.

gRPC Clients

Not speaking for my employer, but about my employer:

Our entire QA team has scoured the internet looking for a gRPC equivalent of Postman. So many contenders… so many failures. Not a single client we’ve found has been able to do a fraction of what we want. The closest we got was a cli tool that failed on recursive definitions. Fail, fail, fail.

To fill this void, we had to create our own client. The main one is Java based and is used heavily by QA to test all our definitions and endpoints. The other is a kafkacat type utility that reads protobufs out of Kafka. This one if Python based. Sometimes the two conflict (e.g. Timestamp), which causes us to rip our hair out. Best to stick within one language for testing.

Someday, when I have an exorbitant amount of free time, I hope to slap a UI on this thing and release to the public.