Debugging a recent project has been surprisingly challenging. It’s a complicated product with multiple components, but that’s nothing new. The customer’s QA department has done great work, but it still feels like this is harder than it should be.
I’ve always felt that code should be absolute, with concrete yes or no answers. It is like that on the small scale: An “if” statement runs one branch or the other. But on the larger scale, it’s very hard to treat our code that way.
To have a successful project, you need to trust your team, and they need to trust you. This is obvious on some levels. Your team must trust that they’re going to get paid, and you must trust that they’re not going to copy your whole database and sell it to your competitors. But trusting your […]
How do you share information with your team? There are so many different things to communicate: Bob is out sick today. The TPS reports are functional and deployed. The utilization metrics have been spec’d. Visual design is complete for the login screen. We’re still seeing errors from that federated login package. We’re all out of […]
I’ve recently taken a couple of very fun trips. They’ve taught me to appreciate certain kinds of planning—and to understand when it’s worth sweating the details–whether I’m traveling or creating software.
When you hire a software team, you probably have a pretty good understanding of the technical roles they need to fill: development, design, devops, testing, etc. But don’t gloss over the leadership roles—especially the ones that your team may be responsible for.
Security is hard, and there are some very creative and resourceful criminals out there. They’ll use brute force, misdirection, deception, and any other tools they can invent to try and take advantage.
People are surprisingly weak at evaluating risk. People are even worse when dealing with risks that they haven’t experienced themselves.
A few years back, I wrote a post describing how we used Chef and other tools to build a virtual machine “appliance.” The short version is that we tried to make a copy of everything we were installing so that if we needed to make a point release later, we’d be able to reproduce the […]
Sometimes, printing things out is the simplest debugging technique we can use. And then, when we forget to take the print statements out, we call the output our logs. That’s a mistake. Logging shouldn’t be an afterthought. It’s a core piece of diagnostic tooling. Logs are so cheap to integrate that they are almost always […]