You’re driving smoothly down the freeway, and suddenly, you’re in stop-and-go traffic. After half an hour, you creep by an accident on the other side of the freeway. Just from people slowing down to see what’s going on, your direction has jammed up. Intuitively, it makes sense that when a freeway is close to capacity, any tiny slowdown can have a huge impact.

With software, these jams are invisible except for their effects. At most companies, we can’t see the cars lined up, all we see is that not a lot of stuff is being shipped, and people don’t seem…


I grew up in Colorado, where the roads get dangerously icy during the winter. When you hit an icy patch and your car starts losing control, your immediate instinctive reaction is to slam on the brakes. But it turns out that is exactly the opposite of what you should do. Your tires have nothing to grip; the brakes lock the wheels and just help the car spin out control.

When it comes to engineering practices, our instincts are very often similarly misguided.

At one of my previous jobs we released every two weeks. As we grew, the releases got more…


Verbatim from my Pa (Dr. John Van Couvering, geologist and all-around Scientist), who wrote this up for a his local neighborhood newsletter in upstate New York

Most of us have heard of the great extinction that wiped the dinosaurs off the face of the earth. Of course this didn’t really happen, because birds — aha! — are dinosaurs. But few may be aware that the human presence on the planet follows, not one, but four narrow escapes from extinction, going all the way back before dinosaurs even evolved. We are rather like Fearless Fosdick (Li’l Abner’s comic hero) who pops…


Traditionally we have been taught that we should strive for high coverage on unit tests, and build some integration tests for end-to-end flows. I’d like to refine that a little bit in this article on testing principles and strategy.

Principles of Testing

There are some key principles that drive the way I think about testing. It’s important to call these out because it helps you understand why you’re testing in a certain way, and what testing approaches are not as useful as you might think at first…

Enable empowered and independent teams


A colleague asked me a bunch of great questions about best practices around emitting domain events, and I thought I’d share it as an FAQ. These are my opinions based on my experience, and would very much love your thoughts and input…

Q: Should you put more than one event type into the same topic?

A: No. This is for a few reasons. Consumers would need to have special logic to identify which type of message this is, and if they only care about one type, they have to waste a lot of processing power to filter out the other…


Being stuck in Tomales without power this last weekend showed me exactly where my preparations were missing important details. With climate change bearing down on us, this is our new reality. So I thought I’d share what I learned, some of it was surprising

  • Get an emergency radio. It is absolutely terrible not having any information about what is going on. Does that thick smoke billowing my way mean a fire is coming? Is there a town nearby that has power? What stores are open? …


So, yea, I’m a “software architect” — a principal engineer. I like my job. It’s challenging, it’s fun, and it scratches an itch. I’m also a little sad, because it is really hard for me to code as much as I would like to. I have to always fight to find time to just get in the code and build stuff.

I didn’t really plan to have this job. I just started working and over time discovered this role and discovered I liked it. So when younger engineers who are interested in advancing their career ask me what I did…


I wrote this up as an internal document at WeWork, and have found myself referring to it multiple times as I help guide teams to make decisions around this.

A microservice architecture provides great advantages. It provides the foundation for a loosely-coupled architecture that allows teams to work independently and deploy independently. It also allows us to have much more flexibility operationally. Some services can scale significantly while for others you only need a few instances. Some services need significant amounts of memory and others can run very lean.

However, once your systems is decomposed into independent services, a new…


When you become a senior member of your team, you run into a problem, the problem of time and focus.

Because of your expertise and experience, people rely on you for guidance. So you need to talk with them, review their documents, review their code, provide feedback. You get a pile of code review requests, and are invited to a ton of meetings.

Soon you are no longer doing one of the things you love best, which is actually getting stuff done, being in the code, building things. …

David Van Couvering

Architect at eBay, but still learning who I really am

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store