Sarah Savage logo

A fusion of development and business

Mental health in tech

I’m not ashamed to admit the fact that I struggle with my mental health. Mental health issues are common among technology professionals. Perhaps this is even more common than in the general population, though I do not have any statistics to back this up. What I can say for certain, though, is that the technology world is not conducive to great mental health: we put incredible pressure on developers to deliver the impossible in unrealistic… continue reading.

The joy in the dirty jobs

Everybody loves to make software that is glamorous, beautiful, and amazing. But very few people like doing the grunt work that it takes to get there. Work like devops, deployment, CI/CD pipeline management, project management, and more is required for every project to succeed. Being able to dive deep into the bowels of a framework or package, uncover why the pipeline is failing every so often, or determining the best way to deploy an application… continue reading.

Twenty lessons from twenty years of PHP (Part 1)

I started writing PHP in 2003 when I needed to build an online game. While I had intended to use Excel formulas for the game, one of the players didn’t have Excel; this prompted me to learn PHP. Over the course of twenty years, I have learned many things. This is part one of the things that I have learned. 1. Programming is part skill, part art It’s easy to think that code is simply… continue reading.

Backups matter.

It’s 4 am and your servers are down. Your infrastructure provider is having a major outage with no estimated restore time, and your entire application is offline. You’re scrambling, because in two hours your customers come online and will flood support with complaints and questions. The decision is made – let’s stand up a backup infrastructure. And then you ask yourself the question: Do you know where your backups even are? If your backups are… continue reading.

The danger of boolean flags in object methods

Developers like to use booleans as flags. They’re a convenient way to indicate something as on/off, true/false, yes/no. But the problem is that booleans are not clear from calling code exactly what they do. For example: Does anyone in the calling scope have any idea what the defining scope is doing? Absolutely not. The flag could be set for saving the name in the database, or for making it all capital letters, or for echoing… continue reading.

Endings in open source

Most projects announce to some kind of fanfare – some greater than others. We love to see a new open source project released, and we cheer when a new package is available that solves a problem, particularly if it’s a problem we’re having. On the other end of the spectrum is the fact that open source packages can sometimes run their course, and need retirement. Such is the nature of a package that I maintain,… continue reading.

Air Traffic Control: Routing microservices with a single Nginx server

In my last post I talked about linking microservices together inside a single Docker network for easy communication between the services. For web developers, this poses an interesting problem: if we want to access the services from our local machines, we need to deal with the fact that we can’t have multiple machines bound to the same port. If you have two microservices running at the same time, both trying to bind to ports 80/443… continue reading.

How to move faster WITHOUT breaking things

In 1978, United Airlines Flight 173 crashed just short of Portland International Airport. Due to a landing gear malfunction, the aircraft was circling the area trying to resolve the issue; the copilot and flight engineer hinted to the pilot as to the state of the fuel system, but these hints were ignored until the engines flamed out. Ten people died. On April 4th, 2022, Atlassian inadvertently deleted a number of cloud accounts. The incident stemmed… continue reading.

Using common networks for communicating via microservices

If you have ever worked in a microservices architecture, you know that you have many related but separate services, often in isolated development environments. For example, you may have the identity service separate from the user creation service, which is separate from other services. Using mocks (like WireMock) is a good idea for testing against APIs that you need to implement but don’t want to test directly against. It’s easy to include a mock server… continue reading.

My journey of transition and self-discovery

For me, it started like so many inquiries do: with a Google search. I typed my query into Google, “what does it mean if you feel like the opposite gender”, and held my breath while Google worked its magic. That day I learned a new word: “transgender”. It was a word I knew before but had never really considered. As I read the stories of others who felt like I did, I realized something very… continue reading.