Category: General Commentary

Generally commentary on tech-related issues.

  • Product management really does matter

    Not too long ago, Joel Spolsky’s blog post about architecture astronauts hit my various consumption feeds, and it serves as a good reminder that, as fun as it is to make fun of product managers (and it is a lot of fun), they’re also probably the most important people in software development. That may seem a bit over the top, seeing as how QA engineers are the ones who ensure that what’s shipped actually works, developers like me actually write the applications and services in the first place, and then there’s the operations teams that build and run the production infrastructure the code actually runs on. It sure sounds like there’s a lot of other people with a lot more direct connection to the actual engineering bits. The truth is, we’re all important, but without good product management, it’s entirely possible for everyone else to do a perfect job…and the release still fail.

    (more…)
  • The checkboxes are everywhere, and once you notice them you’ll never unsee them

    I’ve lost count of the number of times I’ve had to sit through some sort of motivational, life lesson-style speech. I have not however, lost count of the number of lines from those speeches that actually stuck with me, because it’s literally “2.” Most people trying to write 1 of these speeches would be better served by rolling in a TV and playing the song “Everybody’s Free to Wear Sunscreen” instead. But there is another idea, from talk about sales and marketing strategies for a company I used to work for, that has so subtly stuck with me and now pops up with frightening regularity.

    (more…)
  • A case study in peak overemployment

    If you see tech updates on Twitter (never X), you may have heard of the strange tale of 1 Soham Parekh. Apparently the young man has taken the trend of overemployment to a level that can be best described as caricature. For a recap on what’s happened and the initial fallout, as well as Parekh trying to defend himself, here’s a video covering the incident. While it’s easy to grab a snack and enjoy the drama, this Parekh character seems emblematic of a lot of issues going on right now, and it’s worth talking about.

    (more…)
  • The myth of “enterprise software”

    We don’t talk about uncategorized software all that often. We almost always include an adjective to indicate something about the code we’re discussing, usually as a means of describing the problem domain. As a few quick examples, there’s e-commerce software, marketing software, educational software, or inventory management software. That clarification is handy, since it provides context about the code being discussed. The problem (and I would not be at all surprised if Java people – and I largely write Java at my job – did this), is when we over-generalize how we categorize software in a way that adds no value. For example, “administrative software” or “enterprise software.”

    (more…)
  • Abstractions are hard to get right

    Abstractions are 1 of those things that are fairly easy to understand the basics of, but hard to really do right. They’re a tool used to simplify code by using a simpler-to-understand proxy (like a database record or a class/interface), but that doesn’t really scratch the surface of how to use them well vs. just tossing in them into code because you’re supposed use them. Done well, abstractions let you move forward while keeping just the right level of detail in your head. The problem is that almost everything we do in programming is just layering abstractions over real-world processes and behaviors. That makes it deceptively easy to have software that feels like it’s in the way more than it is actually helping anything.

    (more…)
  • The AI pitfall

    I really wanted to call this “The AI trap,” but I try not to ascribe to malice what I could explain with ignorance, apathy, and/or stupidity, and given that I generally don’t ascribe the level of foresight and deliberation needed to execute a “trap” to the types of people running large public companies, “trap” isn’t the right word. But even so, this push to start using AI to do as much as humanly possible has already generated content about the plight of junior devs. What I’m worried about is senior developers (yes, I am technically considered a “senior” dev, so there is some self-interest here) are about to walk themselves into a nasty setup they’re never going to recover from.

    (more…)
  • You can just run the code

    So I haven’t made as much progress on the actual gift registry I wanted to write this year, although I do have a Go web application that connects to a Postgres database, with an endpoint that gets the database stats, collects telemetry data, pipes it all to an OpenTelemetry stack, and returns an HTML page with the health check results (server-side rendering is a much more pleasant experience than trying to wrangle Javascript frameworks). I also have tests that confirm this is working. That took a lot longer to set up than I anticipated, but I’m really happy with what I’ve been able to do.

    (more…)
  • I don’t think the problem is that the job market is broken

    If you hear anyone say anything about the jobs market these days, odds are the word “broken” comes to mind. Hundreds of resumes sent out, and in the best case scenario people have been getting tens of calls in response. Not job offers, not in-person interviews, just the company in question calling back to start the potential interview process. Given the auto-rejections coming far too quickly for a human to have made a decision on the resume, the silence about whether or not the company is moving forward with candidates, and ghost jobs, it’s easy to see why people think there’s a fundamental problem with the process. From the employer side, given the fact the software industry has a bloodbath lately, there’s far more applicants than openings, and by all (public-facing at least) indications, every posting is getting flooded with applications. All of this is leading to a situation where people in software are going unemployed for months, even years, after losing their jobs. All of this certainly sounds like a system that fundamentally isn’t working, but I’ve come to a more disturbing hypothesis – the job market isn’t broken, it’s been optimized.

    (more…)
  • Another “left-pad” incident is coming, and it’s going to be nasty.

    Maybe it’s just me, but lately it seems like every problem that doesn’t come directly from customers is resolved by integrating with something that just does it for you, no need to worry. Some of this stuff is really useful because it solves a problem that’s tangential to yours but too much work to just do yourself (for example, a library that renders graphs on a web page based on JSON data, or a framework for setting up a REST API web server). But lately it seems like more and more stuff is coming out that’s handling stuff that really should be handled by the application itself (for example, building an OAuth sign-in widget, or implementing feature flags). I get not wanting to spend a lot of time on something that isn’t the key thing that your business does, but I think we’re wildly overestimating the value we’re bringing to our applications if we outsource everything but proprietary company data, and wildly underestimating our exposure if 1 of these dependencies breaks or has a security problem. Just because it’s not “core” to the main objectives of our software doesn’t mean it’s not important, or so complicated that we can’t do it ourselves.

    (more…)
  • That deep end was deeper than I anticipated

    So while I read up on Golang, I thought I’d go ahead and set up some sort of observability infrastructure to have in place as soon as I started coding. After all, part of my goal is to instrument an application for OpenTelemetry and take advantage of that. What I found was that it’s not as simple as “pick something and spin it up” as I had hoped. That makes sense, running these sorts of services is part of platform engineering, there are teams whose full-time job includes deploying and managing these types of services, but I’m still spending longer getting that up and ready than I initially wanted to. But that’s OK – another part of this is to get better at operating software, and stuff like this is good for understanding what all is involved in “running and supporting software that actually has users.”

    (more…)