Software architecture advice for CTOs and VPs R&D
I help you make the right decision on time.
Several of your teams are building on a shared foundation
Tasks that used to be huge, such as moving a codebase between languages or swapping one SQL database for another, are now in reach of a single team.
Others, such as deciding what holds your source of truth or defining the boundaries for the core libraries of an SDK, are expensive because they're hard to change. Get them wrong and you find out a year later, in an API your customers have already integrated against.
I work through shared architecture decisions with your teams and write up the reasoning behind them, so they can be referred to when questions come up later.
Where I come in
Do any of these look familiar?
Open any card to see how I'd handle it, and where I have done it before.
SDK in Python and TS
You maintain the same SDK in two or three languages, and the same bug gets fixed separately in each.
How I've handled it at BandRewrite it in Rust
An AI agent could port one of your services to another language right now, and you're wondering if you should.
How I've handled it at RedisAgents aren't mature yet
The technology you want to use looks right for the problem but is not yet mature, and someone has to decide.
How I've handled it at Redis and SunbitEverything is important
Your team argues every architectural decision at the same intensity, and the expensive ones fall behind.
How I've handled it at Band and SunbitStandards across teams
Your backend, ML and frontend groups each work to their own standards, and AI agents now write code in all of them.
How I've handled it at Line5Scientists writing code
Your domain experts don't write the software, so implementing what they know needs to go through an engineer.
How I've handled it at AMR biotech startup and UltimaHow I work
Everyone is right about their own part
I've worked on clustering at Redis and storage at XIV: systems that can still fail even if every component is correct. The interesting failures to be learned from are usually in the interactions.
A Python team chooses asyncio because that's the modern way to manage connections. A Rust team uses Tokio for the same reason. Both are right, but running both runtimes in one system multiplies the complexity in a way neither team can see from its own perspective.
I look at both sets of constraints, and explain each team's considerations to the other in familiar terms. Teams are much more willing to live with a recommendation that accounts for each of them.
About
Still in the code
I'm Gavrie Philipson. I have been building software for more than twenty-five years, most of it distributed and much of it performance-critical, including ML pipelines, storage, and clustering.
For the last few years I have been advising both established teams building on shared foundations and early-stage teams defining their initial architecture. All the while I've been keeping my head and hands in the code and staying up to date with the ever-changing tools and methods.
More about me
Services
Ways to work together
Proof of concept
Try it on a small scale before your team builds on it.
Read moreArchitecture decision
One decision, worked all the way through.
Read moreStanding advisor
Someone to discuss with while the decision is still open.
Read moreContact
Let's talk
A few words about what you are building and the decision you are stuck on are enough to start.
Prefer another way to reach me?
- Email: [email protected]
- Phone: +972-54-5918005










