Blogs

Casual notes from my corner of the internet—work stories, nerdy lessons learned, and the occasional life update. Mostly .NET, Azure, distributed systems, and whatever I’m tinkering with that week.

Latest posts

Click “Read more” to expand a post.

Dec 2023 On-call Datadog / App Insights

The month on-call finally felt… chill?

I didn’t become a wizard. We just made the system easier to understand. Which is basically the same thing.

Read more

I used to think “being good on-call” meant being fast at debugging. But the older I get (in engineer years, which is like dog years), the more I think on-call is mostly about whether the system can tell you what’s happening.

At MedCost, I started leaning hard on traces and correlation IDs. Not in a fancy way—just consistent. Same header names, same log fields, same story across services. When something broke, I could actually follow a request like it was a breadcrumb trail.

Also: I finally wrote down the “first three things I check” during an incident and put it in a runbook. That tiny act saved me from re-learning the same lesson at 2:00 AM.

Oct 2023 Healthcare APIs

Healthcare domain learning: I thought I knew complexity… then I met claims

I came in ready to talk microservices. The domain came in ready to humble me.

Read more

Switching into healthcare work was a reminder that code is the easy part. The hard part is making sure the code matches reality. Claims workflows have a lot of “it depends,” and “it depends” is where bugs go to hide.

I started keeping a little personal glossary. Not a formal doc—just my own notes like “this term sounds like it means X, but actually it means Y.” It felt silly, but it paid off every time I had to explain something back to someone else.

Also, I swear half of engineering is learning the right nouns.

Aug 2023 New Job Energy .NET + Azure

My first month at MedCost: coffee, diagrams, and “wait, which service owns this?”

New team, new domain, same me: drawing boxes and arrows until it makes sense.

Read more

First month on a new platform always feels like joining a TV show in season five. Everyone else knows the lore. I’m over here asking what a thing is called and why it exists.

I leaned into my favorite coping mechanism: diagrams. I drew the request flow. I drew the message flow. I drew the “who owns which database” map (which is always spicy). Every time I got confused, I updated the picture.

Outside of work I kept it simple—walks, a good playlist, and trying not to think about Azure resource naming at dinner.

May 2023 Debugging Tracing

I chased a “ghost bug” for two days. Correlation IDs saved me.

The bug only showed up sometimes. Which meant it showed up exactly when I had plans.

Read more

The worst bugs are the ones that make you question your own memory. “Did I already fix that?” “Why is it only happening for this one user?” “Is the universe mad at me?”

I eventually realized the system was doing two similar operations that looked identical in logs. Once we started stamping the same correlation ID across the HTTP call and the follow-up message (and the downstream service), everything snapped into focus. It wasn’t haunted. It was just a normal race condition wearing a Halloween costume.

That week also reminded me to go outside. Debugging is faster when you’ve seen sunlight recently.

Feb 2023 Feature Flags Fintech

Feature flags saved my Friday night

I love shipping. I also love not spending my weekend rolling back in a panic. Feature flags let me do both.

Read more

We had a change that was logically simple but operationally terrifying. You know the kind: touches a core payment workflow, has a bunch of “should never happen” edge cases, and would definitely happen.

We wrapped it behind a flag, deployed it early, and enabled it in small doses. When a weird corner case showed up, we turned it off for a subset of traffic, fixed it calmly, and tried again.

After work I celebrated the best way I know how: a snack, a dumb show, and the quiet joy of not being paged.

Apr 2023 Reliability Team Rituals

We ran a “failure drill” and it made a normal Tuesday feel heroic

Turns out practicing failure in daylight is way better than learning it at midnight.

Read more

At GreenDot we started doing tiny reliability drills—kill a dependency, force a retry storm, and see what breaks. Nothing dramatic, just enough to keep our mental map honest.

We learned our dashboards were decent, but our alerts were a little too loud and a little too late. After tuning them, on-call felt less like guessing and more like reading a story.

The best part was the vibe: it felt like a team puzzle. We ordered lunch, fixed a few runbooks, and called it a win.

Nov 2022 RabbitMQ / Service Bus Idempotency

Message queues taught me humility

I used to think “processed” meant “done.” Then a duplicate message showed up and ruined my confidence.

Read more

Building transaction workflows with messaging is awesome, because your services stop calling each other like anxious coworkers. But you pay for that freedom in one currency: reality.

Reality is duplicates. Reality is timeouts. Reality is a message that gets re-delivered when you least expect it. Once I accepted that, I stopped writing consumers that assumed the universe was polite. I started writing consumers that were basically like: “Yep, I’ve seen this before. We’re good.”

I also started getting oddly into retry policies. I’m not proud. But I am at peace.

Sep 2022 Docker CI/CD

Docker finally clicked for me (after I stopped fighting it)

I spent too long treating containers like magic. The day I treated them like boring packaging was the day they became useful.

Read more

The first few times I used Docker, I did the classic thing: I broke something, then I cursed Docker, then I went back to running everything locally “the old way.”

Later, we containerized services to keep environments consistent across dev and CI. The payoff was immediate: fewer mysterious “only fails in staging” issues, fewer setup arguments, and a way easier time collaborating across teams.

Outside of work I was also tinkering with small projects at home, so the “package it once” mindset started bleeding into everything. Honestly? Not mad about it.

Jul 2022 SQL Server Performance

SQL execution plans, coffee, and the art of not panicking

Sometimes performance tuning is just “stare at the plan until you see the lie.”

Read more

We had an endpoint that was fine… until it wasn’t. Under load it slowed down and made everyone assume the API was the problem. Spoiler: it was the query.

I made a fresh coffee, pulled an execution plan, and did my favorite detective routine: “Where is the expensive operator and what did we do to deserve it?” Turns out we were pulling way more rows than we thought, then sorting in a way that hurt. Nothing magical—just a mismatch between our mental model and what the database was actually doing.

The best part of tuning is the moment after the fix when the graphs relax. It’s like the system lets out a sigh.

Apr 2022 API Design Angular Collaboration

My favorite kind of meeting: the one where we agree on the API contract

Give me 30 minutes of “what does the UI actually need?” and I’ll save you three days of rework.

Read more

Working with frontend teams taught me to love boring consistency. Not “boring” as in uncreative—boring as in predictable. Same paging style. Same error shape. Same naming. The little stuff.

One day we got ahead of a looming deadline by just sitting down and agreeing on what the API would return, how we’d version it if we needed to change it, and what we’d consider a breaking change.

Afterward I felt the same satisfaction as reorganizing a toolbox. Everything is where you expect it.

Jan 2022 Hobby Nerd Stuff

My tiny “home lab” era (aka: I needed a hobby that wasn’t more work)

I learned a lot about systems by building small ones at home… and breaking them in peace.

Read more

At some point I realized I actually enjoy setting up little services for fun. Not because I’m trying to “grind,” but because it scratches the same itch as solving a puzzle.

I played with containerized apps, logs, dashboards, and the occasional “why is my network doing this?” moment. It made me calmer at work, because I got used to thinking in terms of: observe → hypothesize → test → repeat.

Plus it gave me an excuse to buy a label maker. If you know, you know.

Oct 2021 Remote Work Life

I started doing walking meetings and my brain said “thank you”

Turns out staring at a screen for 9 hours straight is not the productivity hack I thought it was.

Read more

Remote work has perks, but it also quietly turns you into a desk goblin. One week I realized I’d spent an entire day inside and my only travel was from chair to fridge.

I started taking a couple calls on a walk. Not every meeting works like that (please don’t walk during “incident review”), but for quick syncs it was perfect. I came back more focused, and honestly more patient.

It also made the Florida weather feel less like “the thing outside” and more like “part of my day.”

Dec 2021 Life Deploys

Holiday break plans vs. the tiny deploy that almost stole them

I was ready for a quiet week. The system had other ideas (a small one, thankfully).

Read more

I had a low‑key plan: drive a bit, see family, read a book that wasn’t about software. Then a minor release needed a quick patch before the holidays. It wasn’t a fire, just a “hey, can you take a look?” situation.

We fixed it fast, wrote a note for the next person, and I actually got to unplug. It was a small win, but I remember thinking: this is what good process buys you—less chaos, more real life.

Also, I discovered I genuinely enjoy cooking when no one is paging me. Who knew.

Aug 2021 Operations Work

Writing runbooks feels boring… until you’re tired and everything’s on fire

Future-me is always a little stressed. Past-me writing notes is basically an act of love.

Read more

I used to think runbooks were overkill. Then I got paged, groggy, and had to remember “that one weird workaround” from six months ago. My memory was not a reliable storage medium.

So I started writing tiny runbooks: where logs live, how to replay a message safely, what metrics matter, what “normal” looks like. Nothing fancy. Just enough that I could act confidently.

Bonus: it made onboarding easier, and it made me look way more organized than I actually am.

May 2021 Integrations Retries

Third‑party integrations are where optimism goes to die (politely)

I love other people’s APIs. I just wish they loved me back.

Read more

When I build an integration, I start with hope. Then I meet the edge cases: rate limits, timeouts, occasional 500s that recover if you just… wait. Eventually you accept that your job is to build a system that stays calm when somebody else’s system is having a day.

I learned to be very intentional about timeouts and retries. Not “retry forever,” but “retry like you respect the other service” and “don’t turn one outage into a bigger outage.”

When it went well, it felt like good plumbing. When it went badly, it felt like I was negotiating with the internet.

Mar 2021 Teamwork Code Reviews

I got better at PR reviews when I stopped trying to be “right”

My goal shifted from “win the argument” to “reduce risk and help the next person.” It got way nicer.

Read more

Early in my career, reviews felt like a debate club. Now I treat reviews more like a safety check: will this break prod, will this be hard to maintain, will someone else understand it at 2 AM?

The best trick I learned was simple: ask what problem the code is solving before commenting on the implementation. Half the time, the best review comment is “can you add a sentence explaining the why?”

And yes, I still leave nitpicks sometimes. I’m human.

Dec 2020 Fintech Reality

Fintech reality check: reconciliation is the main character

I thought payments would be about moving money. It’s also about proving you moved money.

Read more

In my early months working in fintech, I learned that the “real work” often happens after the happy path. You don’t just process a transaction—you reconcile it. You don’t just store a number—you explain where it came from.

That changed how I wrote services. I started thinking about audit trails, idempotency, and “can we tell a clear story about this event later?” because support and operations will absolutely need that story.

It’s nerdy, but I genuinely loved the feeling of a clean, balanced ledger at the end of a run.

Oct 2020 Learning .NET Core

Learning new tech in 2020 was… a vibe

I was leveling up on .NET Core, writing APIs, and also trying to remember what day it was. Fun times.

Read more

2020 was weird for everyone, and my brain definitely felt it. Still, I was deep in building services, learning new patterns, and trying to keep my code clean while everything else felt… not clean.

I started doing a small thing that helped a lot: at the end of the day, I wrote down what I learned. One paragraph. Nothing fancy. It kept the weeks from blurring together and made me feel like I was actually progressing.

Also: I discovered that making coffee became a tiny ritual that separated “home” from “work,” even when both were the same room.

Aug 2020 GreenDot New Role

My first week at GreenDot: so many acronyms, so little time

I joined fintech and immediately learned that “payment” is a whole ecosystem, not a single feature.

Read more

First week at a new job is always the same: lots of intros, lots of tools, and a bunch of tabs I’m afraid to close because I’ll never find them again.

I was working in .NET Core services, learning the transaction flows, and getting comfortable with messaging. I remember thinking, “okay, I get it,” and then immediately discovering a new queue or a new edge case. Humbling. Great. Love it.

Outside of work, I tried to keep my routine stable. Sleep, decent food, and the occasional “touch grass” reminder. Starting strong matters.

Jun 2020 Work Communication

Communication defaults I wish I adopted sooner

Clear writing is a performance optimization. I didn’t believe that at first. Now I do.

Read more

I used to treat communication like “extra.” Like, after I finished coding, I’d explain it. But projects got bigger, and I realized misalignment costs way more than a few minutes writing a clear note.

I started doing small things: leading with a summary, writing down decisions, and making action items painfully explicit. Not because I’m naturally organized, but because it kept work moving.

It also made my life outside work calmer. Fewer late surprises, fewer “wait, what are we doing?” moments. More time to enjoy regular human stuff.