About Me

I am just some guy with a cool wife and funny kids who likes making things that probably don’t need to exist, like this website, a bunch of albums, and all these words.

I made Resolution and I just finished an acoustic album.

About Me

I am just some guy with a cool wife and funny kids who likes making things that probably don’t need to exist, like this website, a bunch of albums, and all these words.

Here’s some of my work.

I’m also the lunatic behind a what-if scenario planning & goal setting application called Resolution. You can use it for free here, or check out our fairly large set of examples

Look at This Hat

I recently finished an acoustic album, and it came out pretty good! If you like stripped down, half-earnest half-winking-at-the-camera punk rock songs recorded by some Dad in his living room, you should listen to it.

Listen Now:

Spotify | Apple Music

Incredulity

Every day, there are many things I don’t do because I think they are fundamentally wrong. Some of those things might get me something I want, or closer to something I want, or away from something I don’t want to do, but I find them wrong so I don’t do them. This does not make me special, this just makes me a functional, civilized adult.

However, I don’t see myself as some inherently perfect paragon of virtue. I really do try to operate outside of simple, transactional self-interest, but simple, transactional self-interest does affect me. For example, my very self-righteous, Protestant-work-ethic desire to be employed and financially productive has wavered in direct response to how badly I need money. I measure my words online and at the office in large part because I (reasonably) fear the short and long term consequences of saying whatever I think whenever I think it.

In other words, I do a lot of things the right way because I have morals, but there’s a gray area where even I don’t know if I do some things because they are right, or because they are safe. That’s why, as a society, we try to make the right things safe, and the wrong things dangerous. It’s moral hazard!

Steve Ballmer and Moral Hazard

Steve Ballmer bought the Los Angeles Clippers a few years ago because he has effectively an unlimited amount of money. Despite this, he can’t just do whatever he wants with his team (like spend his infinite money to just sign all the best players), because he’s part of an association that has rules and restrictions on that sort of thing. Ballmer is in trouble because through some excellent journalism, it’s come to light that his star player Kawhi Leonard has been getting huge amounts of endorsement money from a weird, unprofitable startup owned by Ballmer and his Clippers ownership partner, for doing nothing. Effectively, this looks like money laundering to avoid the rules on how much teams can spend on their salaries, which is a pretty massive deal in the NBA.

Ballmer has denied everything and pleads ignorance on everything from his investment in this company to the particulars of how Leonard was compensated, but as more evidence is revealed each day, things are looking worse and worse for him and the team. Like, a lot worse.

When this story initially broke, one of the loudest forms of skepticism that I heard can basically be paraphrased as such — “Steve Ballmer is really smart, and this whole scheme seems incredibly stupid. While it’s nominally money laundering, it’s lazy, ham-fisted, and the idea that a kajillionaire business magnate who clearly loves owning and operating his basketball team would risk so much strains credulity.”

On the one hand, this is a pretty reasonable take. But it’s actually just a great reminder that culturally and morally, there is a huge disconnect between our expectations for how the world should/will work, and what’s required to ensure that it does that. While there’s this sort of baked-in assumption that these activities are risky for people like Ballmer, is that assumption actually valid? One of the first social science things I learned in college that really raised eyebrows was that while people spent a lot of time arguing about criminal punishments, the real driver for crime was whether people got caught at all. We focused on sentencing because it’s easy — those people have been found and convicted, so putting them in prison for any amount of time is trivially easy. One year, five years, a hundred years, whatever! However, actually catching people who commit crimes is much, much harder than you would think. It requires more than power and authority; it requires skill, resources, and lots of hard, boring work.

It’s hard to catch — really catch — people doing bad things, which is why so many bad things have been discouraged with penalties like shame, embarrassment, and reputational damage that don’t necessarily require a famous or powerful person to get truly, legally, undeniably caught. Historically, simply being associated with something like a corrupt, self-dealing cryptocurrency or shady real-estate scam has been harmful to people with big ambitions, regardless of whether it’s been specifically proven that they did whatever bad thing that association implies. It’s not “go to jail” harmful, and it never should be — the power of the state to take someone’s freedom away is enormous, and dangerous. But one of the reasons people lost their minds over “cancel culture” is because the non-legal, indirect consequences of people believing you are bad are really potent, and people don’t like when they have to pay them.

(As an aside, as with many social punishments, I don’t have a fundamental problem with “cancelling” famous people from fame and media exposure. I just sometimes have a problem — as many/most people do — with when we do it and who we do it to. That’s a boring answer, but I’m quite confident that it’s the correct one. The idea that as a culture, we should continue to focus our attention on the same people even if they say or do awful things is obviously stupid. It has nothing to do with free speech, and everything to do with bad, unprincipled editorial choices.)

But here’s the thing — just like we lack the physical resources to bring every criminal accusation to trial (and thus depend on a system of plea bargains just to keep the lights on), we lack the same resources to adjudicate every terrible thing that powerful people are capable of doing, so we depend on shame and yes, the threat of being “canceled” (it’s just… such an eye-rolling term, my God) to keep the world working the way we expect it to. In a shameless world, though, the system starts to break, and it makes sense for people with a ton of resources to simply fold their arms, deny everything, and demand the system adjudicate everything to the full extent of whatever the law is, because the law alone is actually pretty easy to survive if you are rich and powerful.

So I don’t know what Steve Ballmer did or didn’t do in this case, but I do agree he’s not stupid. However, given what a ruthless, smart, powerful person might see as his best option to move forward in 2025, I think Ballmer’s savvy might be as much of a potential explanation for his guilt as his innocence, which is a bad sign for everyone.

Real-World Vibe Coding

It’s been a couple years since I took my first look at generative AI and concluded that the most likely use case for this kind of technology, by far, was “better” spam. Since then, despite all the activity, investment, discussion, and model releases, nothing has really fundamentally changed my mind about that. While image generation is dramatically better, text generation is dramatically cheaper, and the tooling for all of it is simpler and more available, this stuff continues to be an inch deep and a mile wide. The strongest utopians and doomers share a tendency to see revolutionary changes to work they don’t actually do themselves, or even understand, and much less impact to things that they have real working knowledge of or true responsibility for.

Charlie Warzel wrote a few days back about an idea that I’ve felt has been inevitable for a long time — what if this technology is basically mature?

“This is the language that the technology’s builders and backers have given us, which means that discussions that situate the technology in the future are being had on their terms. This is a mistake, and it is perhaps the reason so many people feel adrift. Lately, I’ve been preoccupied with a different question: What if generative AI isn’t God in the machine or vaporware? What if it’s just good enough, useful to many without being revolutionary? Right now, the models don’t think—they predict and arrange tokens of language to provide plausible responses to queries. There is little compelling evidence that they will evolve without some kind of quantum research leap. What if they never stop hallucinating and never develop the kind of creative ingenuity that powers actual human intelligence?”

I think this is exactly right, and I think it’s been inevitable almost from day one given what this stuff fundamentally is underneath. Warzel then gets into the part that’s probably way more important, which is the socio-emotional impact of this stuff being everywhere and baked into everything (the whole piece is very good), but I’m going to stick with answering a much simpler question — what’s a potentially valuable use case from plausible looking, computer generated content with no guaranteed connection to reality?

The Test Data Robot

My latest half-baked idea involves LLM parsing of emails, and spitting them out as structured data. It’s a potentially dubious concept at its core due to all of the apparent limitations of this technology described above, but it’s one of those interesting “well, maybe it’ll work?” concepts that you really have to try to understand. Unfortunately, since we can never really understand if a logical prompt “works” or not (because no matter how carefully we write it, our prompt is not programming — it’s just natural language going into a black box, and then something comes out of the box), the best thing we can do is test the hell out of it. Give it tons and tons of emails, see what it spits out each time. You’re unlikely to get to the root cause of those test outcomes (because again, there is no root cause), but you can get the success/failure rate and see if you’re comfortable with it.

Now, while it often feels like I have an unlimited number of event emails in my inbox, this is not literally the case. I also don’t feel like making them up for test purposes, certainly not with all of the fluff and structure that makes them look, feel, and function like real test data, and at the scale that I need them for testing. But you know what has plenty of time on its hands? Yeah you do.

Just Prompts (v1.0)

I started out the way most people probably do, by simply talking to Gemini and asking it to make me these sort of emails. The output was… kind of annoying, and didn’t look or feel like ones I actually got at work. In the spirit of giving the LLM as much to work with as possible, I proceeded to feed it a bunch of actual emails from work, hoping that it would pick up some patterns. While this sounds like a good idea, there’s a pretty big difference between being a machine learning engineer writing custom models, and shoving a bunch of stuff into a chatbot, and the results certainly bore that out.

You know your emails are boring when the AI using them as training material begs is like “I’m good, please stop sending me these”.

While I got some initially promising results, there was a clear drop-off once I gave it around five emails where it started to ignore previous ones in the “training set” (I know, I know, this is not an actual “training set” of anything) and it became clear it was just aping whatever I gave it.

The endless self-flagellation is a little much, especially when followed up with more crappy results.

I started over, and this time, I didn’t give it any training material at all. Instead I just said what I wanted, had it write examples, and corrected a few bad tendencies or examples of it ignoring my requirements. The emails are still obviously, almost painfully fake, but structurally they’re fine (if a bit unrealistically repetitive) and I actually started testing our event, task, and date extraction with them.

The Infinite Garbage Machine (v2.0)

If you’ve tried any of the many productivity hacks floating around the internet these days, many of them involve working directly in ChatGPT or something similar. One fairly major annoyance, though, is the end state of whatever you make — the bot can’t do very much, so you’re often given something and told to copy and paste it somewhere else. So when I got tired of asking for ten HTML emails at a time, scrolling around to find the right one, pasting it into a text file, renaming the file with an .HTML extension, opening the file in a browser, copying the rendered HTML out, and pasting it into an email to send, I decided to try something slightly more sophisticated.

Behold.

This version does a couple of things that are legitimately useful for me:

  1. It generates an entire event “object” (for lack of a better word”) that I can then generate additional “deadlines” for.
  2. It lets me make multiple emails that reference the same event.
  3. It lets me make a deadline specific email.
  4. It lets me assign dates and URLs to the event and its deadlines.
  5. It lets me provide custom instructions for any given email (very helpful for testing).
  6. Gives me a button to download the .HTML directly (which I then have to open, copy, and paste into an email, but still)

To be clear, these emails are still hot garbage. They are barely plausible, fairly repetitive, have the absolute bare minimum of design to them, and the little event fantasy world I’m asking it to maintain in the background often devolves into nonsense with deadlines occurring in implausible orders or having ridiculously short or long amounts of time between two given deadlines.

But… that’s okay! I’m not sending these to anyone. They’re just to test my application’s ability to extract and structure information correctly, and while ultimately what matters is my ability to extract real information from real emails, this is a great combination of pretty easy and clearly better than nothing. So I am declaring success with this project, and labeling this as an actually useful implementation of vibe-coding that was totally worth the cost of… well, I got Gemini Pro included with the Workspace package I needed to buy in order to turn on the domain-wide authentication my experiment requires. So basically, the marginal cost was nothing, but… the utility was real!

Vibe-Coding Reality Check

It was certainly kind of funny to use completely black-box vibe coding to build a tool designed to help us build an application we were developing in a much more traditional manner (with Python and Bubble) at the same time. Progress on the “real” app was often painful, slow, and required thinking through what wasn’t working and why. Progress on the Infinite Garbage Machine was sometimes incredibly fast, but totally unpredictable, and the results were almost always exciting at first, and then slightly disappointing once the reality of what had been delivered set in. And while the whole point (as far as I understand it) of vibe coding is to not have any idea how anything works, there are a few development concepts you should be aware of if you’re going to try anything like this.

Version control. The default Gemini interface is pretty capable, even though as mentioned, it’s sort of odd to run everything in the little “Canvas” widget. (I very lightly kicked the tires on Google’s “Opal”, which is apparently intended specifically for this sort of application development, but it didn’t do a very good job of interpreting my requirements and I gave up.) But one enormous problem I ran into was the lack of an easy way to go back to prior versions of your application. This is especially important because you really have no idea how any request you make will be interpreted, what it will do, or whether it will completely wreck what you have. I didn’t find an easy, obvious, reliable way to “undo”, which made me very hesitant to change things if they were working at all.

Things fall apart. In a related vein, my vibe-coding experiences faced a bit of a paradox where iteration was clearly the only way to get what you really wanted, but that the more you iterated, the more the system started to lose sight of other, older, but no less critical requirements. That’s not really iterating, then, is it? It got bad enough that even though there are obvious ways I’d like to improve the Infinite Garbage Machine, I feel like it’s reached the optimal point of maturity and that the risks of asking for refinement outweigh the benefits.

It’s not very good software. My application barely does anything and it still feels like it’s stuck in the mud. The interface is crappy and very brute-force reliant, the whole thing is ugly, and whatever it’s doing with Gemini in the background to generate things is a lot slower than doing it directly in the app. In theory, I could try to refine these things, but I guess my application is complicated enough that when I started trying to do that, it began to generate worse, more repetitive emails. It’s fine as is, given what I’m going for, but I do think if you expect people to use your vibe-coded tools (I certainly don’t, this garbage is for ME and me alone), you may be surprised by how frustrating and generally poor the end-user experience is, and I don’t know if bragging that you don’t even know how to code will make that any easier for your audience to handle.

In conclusion…

Like “AI”, “vibe-coding” means way too many things and is too often discussed by people who don’t know enough about the source material, and it’s hard to have a real discussion about a vague topic with slippery definitions. That being said, I certainly found “non-deterministic, natural language application generation” to be useful in the fairly narrow, but non-trivial niche of generating simulated test content that met a bunch of relatively simple but important requirements.

So basically:

  1. would it help to have a computer do something?
  2. is the accuracy & precision of the “something” not really the point?
  3. is the user experience basically just “put stuff in, different stuff come out”
  4. is there some prior arrangement that makes this cost-effective for you (i.e., you already have access to a decent LLM)?

… if so, you should give it a try, at least before the bubble bursts and the price of doing all of this explodes.

Uneventful

For the last year, I’ve had to do a bunch of event logistics for work, and… I really did not enjoy doing this work. It’s not a huge deal or anything (I wasn’t exactly working in a bauxite mine), and it really was the most useful thing I could have been doing in my function, so I did it. That’s startup land. But the work is a combination of uninteresting, repetitive, bespoke, and relatively easy to screw up in impactful ways that make it not really great for anyone, but especially challenging for me.

As I worked on this stuff, the most frustrating thing was that I didn’t really seem to be getting that much better or more efficient at it, mostly because it’s just not that kind of work. Unlike production processes where there are creative and technical workflows that can be improved and a level of quality you can aim to surpass with each project (even if you don’t have to), event logistics are often about just not forgetting some stupid little thing you have to do, or making some small resource allocation decision that no one probably cares about but maybe someone really cares about.

To make this even worse, one thing about me that I usually keep close to the vest at work is that I absolutely loathe letting people down. It’s a huge source of stress for me, particularly when I find the work I’m doing itself to be uninteresting, and the main thing driving me forward is just the intrinsic need to be a good teammate and keep other people from getting blocked. And when it comes to third-party event attendance or exhibiting, the pain you — or your colleague who’s sitting in some convention center in the middle of nowhere — feel when things don’t go right is a lot greater than the joy you feel when things go okay.

Despite all of this, events were not going away, because in the space we were in events are how you talk to buyers. It’s just that simple. While the direct, dollar-in/dollar-out justification of any given event remains incredibly hard to track (as with anything that isn’t PPC, it seems), the long arc of lead-generation, deal-closing, and account renewing really did seem to validate the effort and cost of going to a lot of these events. So I decided to, in my spare time, start thinking about what (if anything) would make this work easier, since no one was coming to take it off my plate anytime soon.

The Problems

System of Record

As with a lot of information entry and retrieval jobs, one of the obvious sources of stress I had was no single, central workspace to wrap my arms around. I had a huge email inbox full of mostly junk, but also a bunch of really important stuff, a couple clumsy Google sheets of dubious reliability, and the information discovery nightmare known as Slack. We weren’t doing tons of tons of events — a busy month maybe had two, and whole months would go by where we didn’t have any — but many of them would have anywhere from five to twenty individual tasks with their own deadlines that had to get done over the course of several weeks or maybe months. So there were these sort of streams of activity that went on for months with long stretches of inactivity for any given event, but really no break from always needing to have a firm grip on what was going on with events in general. Tasks tended to sit around, too, because they often required some vendor to respond to a question or blocker, or an internal (non-me) person to make a decision or commitment that they’d refuse to make a decision on for weeks or longer. Normal stuff, but when you add it up it’s just incredibly easy to lose track of some dumb thing and end up paying a late fee for renting a power strip or whatever.

Now, where I’ve been doing this work, we have basically no central project management of any sort besides people’s random spreadsheets, which didn’t help matters. I ended up building out my own system using Airtable, which definitely helped, but Airtable had a lot of extra cruft and didn’t let me do exactly what I wanted to. It was really hard to make certain bits of information stand out, or feel like I was showing things in the context I wanted to. It felt like I was putting in enough work to design the custom front-end of an application without the actual benefits of having a custom application. I’m a little bit of a nut about this stuff, but then again that’s the only reason I was willing to put in the effort to build something with Airtable, so if it’s not working for me I’m not sure it’s really working for anyone.

Extraction

My Airtable task list held up okay when things came to me in the form of URLs, usually from coworkers in Slack. It wasn’t great, but at least it gave me an anchor to put in my task list (“see if we want to go to _____”) so I didn’t forget about it.

Unfortunately, most things came via emails that contained more than one thing to do, more than one URL, or maybe no sufficiently comprehensive URL at all. In other words, I basically need the email, or I need to transfer a bunch of information from the email into a bunch of different fields in my system of record. This is… well, it’s really boring work for starters, and it’s also easy to forget to do, or to screw up. This is especially true as stuff changes, and suddenly I’m rooting around for an email from a month ago that I think I got but can’t seem to find.

Basically, I want the process of extracting useful information from emails and putting that information in a permanently relevant, highly structured place to be as effortless as possible.

Event-Adjacent Information

Customizing the crap out of an Airtable instance gives you ability to literally map almost any kind of relationship — this is why I like Airtable — but I had to admit that it all felt a little cold and removed from my actual, real world of work. With events, I basically have to keep track of three types things:

  1. the event itself (sponsorship, registration, rules, submissions, scheduling)
  2. any people involved (their availability, their status, anything they need to do)
  3. any of our related physical assets (signage, laptops, booth material, collateral, swag)

Then, of course, I have to keep track of the money attached to any of those things. And this is all just to know what we’re putting into this!

I haven’t even started talking about measuring or assessing outcomes, which is a whole different conversation between you, me, and your CRM. But even then, I’m going to need to get back to this information. So the point is that we’re talking about a lot of funny little categories of things that have really specific relationships to the events. There are a bunch of dedicated micro-workflows and views I want of this stuff so I can decide what our options for a 10×10 booth are, or whether it makes sense to ship a bunch of stuff to Florida.

Is this actually a technology problem? And if so, does anyone want to solve it?

This is a question I ask myself all the time, mostly because I already did the “I have this problem, and I built something to solve it” thing with Resolution, only to find out that what I had done was (a) solve my problem, and (b) make something that would solve a problem I have with other people if they used my product, which they probably won’t.

As I did this work from 9 to 5 every day over the weeks and months, it didn’t get any more interesting, but I started to have more and more conviction in what the fundamental jobs-to-be-done were, or more accurately, the job-to-be-done. Bluntly, that job is automated, comprehensive data extraction, assuming extraction includes both pulling data out and sticking it somewhere permanently actionable (my definition does include both of these, but I’m not a computer scientist so apologies to any of them reading this if I stepped on a reserved word there). That’s it. And since I was extracting natural language, and we have all these fancy, highly-subsidized large language models out there, I figured I’d give it a try.

The other thing I learned from Resolution is that while this breaks my heart, it’s just really hard to go to market with a general purpose business product. It’s not impossible, but I’m not very good at it and I don’t really want to spend any money on this, so if this is going to do any good for anyone else, the best thing I could do was focus on a niche. In this case, I’m okay with that because I actually believe that while a VC-targeted macro-solution (“automatic extraction and data structuring FOR ANYTHING”) sounds sexy, like most things the utility here is heavily dependent on nailing the last mile, which is turning your structured data into really useful, workflow-specific interfaces for people to actually click on. So while I’m not really an events guy by choice, I decided to keep the focus there instead of trying to generalize the problem into something I had to explain.

How Uneventful Works

  1. Uneventful is a basic, browser-based CRUD application I built with Bubble. You can do a bunch of normal things in there, like add/create/edit your upcoming events, add deadlines and expenses to any event, manage sponsorship options, or assign people to go. This is the system of record part. There is nothing particularly special about it other than that it’s built specifically to stay on top of managing a bunch of third party events for your organization.
  2. In the background, Uneventful is connected to an email inbox. If you send it an email, Uneventful will use an LLM (and a bunch of custom code, more on this in a second) to pull out any events or event related deadlines, structure them, and add them to your account.

Basically, you can shovel all your annoying transactional emails to Uneventful, and you’ll end up with a list of places you need to be and things you need to do, organized by when they have to be done. The system also grabs things like associated URLs and basic descriptions so it’s a little easier to do whatever you need to do, and even grabs a copy of the email that you can reference to double check any deadline or event in your list. I basically copied this idea from Rippling, except they do it with expenses, and it was an absolute life-saver for me.

For now, that’s it. As Uneventful stands right this second, it’s already a big improvement for me, but there are a number of useful things I’d like to expand on that aren’t outside the realm of technical possibility, even for our crack team of “one burned out product marketing guy” and “a retired electrical engineer”. These include:

  • a web scraper where you throw a URL at it, and Uneventful grabs the event and a bunch of related information about the event.
  • event discovery based on what you do and what events have worked for you
  • “reporting” (eww, lame), but actually good — this is an example of where this is pointless if you just do standard stuff but could be awesome if you really get biz-dev events
  • some way to manage contacts and interactions at a given event; maybe it’s just raw numbers because I don’t foresee this little guy becoming a CRM, but you never know.
  • related but different — some sense of goals and goal management. Since numbers weren’t always a good indicator of value, we’d often try to set up specific goals for an event (“talk to the assistant secretary of ____”) because it was actually easier to quantify revenue impact that way.

“DOES IT AI?” (sigh)

Uneventful does use an LLM in the form of the Google Gemini API. When I first started trying to do this as simply as possible, I rigged Airtable’s new-ish “AI features” to go and grab me descriptions from events I gave it, and it sort of worked. But that was just spitting out a text description for a human to read — it couldn’t really “break” or “fail”.

Uneventful is much more ambitious, and our original plan was to use Gemini to both (a) extract relevant objects from an email, and (b) determine whether those objects were new, existing, or existing and sufficiently different to be updated. As it turns out, Gemini is pretty damn good at the first thing, and maddeningly inconsistent but generally pretty bad at the second thing, even in really simple scenarios where we were using structured schema output from our extraction sequence, and then basically asking Gemini to simply compare two (very, very simple) JSON files. Maybe we’re stupid, but despite trying this over and over again, tweaking prompts, and doing as much debugging as a black box LLM will let you do (“please explain your justification for each conclusion you make and put it in this field“), we just couldn’t get this to work consistently. My Dad — my go to technical resource for all my random projects — is both less cynical about AI than I am (mostly because he’s 75 and doesn’t give a shit about the tech industry one way or the other) and much more comfortable than I am gritting his teeth and solving problems with brute force Python. He went from being pretty enamored with Gemini to borderline disgusted by this failing as it became apparent that we just couldn’t rely on it to perform comparisons. However, it works really nicely for extraction and now that we’ve built out our own comparison logic everything is cheaper and more efficient, so it’s probably for the best.

The front-end of this is all Bubble, which I really think more people should play with. As discussed ad-nauseam here, I am both very much not a real developer AND someone who has taken some computer science classes and written a decent amount of terrible code across BASIC, Pascal, Java, Python, and weird stuff like ActionScript. I can look over my Dad’s shoulder and help him figure out what a loop is doing, but I’ll be damned if I can actually make what I want with code. It’s just too hard for me. If you’re stubborn enough to code and build out data structures, but suffer from the same sort of code-blindness that I do, Bubble is weirdly perfect. You get to wire things up, define objects, build logic and workflows, and even make API calls, but it’s all through configuration panels and settings. There’s a real learning curve, to be certain — this is my second major Bubble effort and I did a bunch of small, broken experiments before I got to those — but I really think it’s worth it. You can make cool stuff, and do many of the fun internet web/app things everyone is talking about. I could never build something like Resolution with Bubble, as it’s impossible to make truly unique, custom UI objects with this approach, but most applications aren’t like that and you get a surprising amount of flexibility.

Want to try it?

Now that it works, I’m interested in getting other people responsible for this sort of work to try it out in a controlled environment (i.e., no more than like, ten of you, and all people comfortable enough to let me fix things, rescue lost data, etc.) to see if this is really useful, or even if it’s close enough to being really useful that I should put more time into it. If that describes you, let me know at hello@resolution.biz and I’ll get you set up!

Competence Theater

I have worked at many places. Without exception, the biggest challenge every one of them faced during my time there was either:

  1. not enough people wanted what we were selling, or didn’t want it badly enough
  2. collectively, we continually did stupid things, or did good/neutral things in stupid ways

That’s it. When we addressed these things, we did better. When we didn’t, we did worse. Heck, even my own company was like this! I continually refused to address the first problem, and as a result, my company was not (and continues to not be, to this day!) very successful.

Thing number one really is an important problem, but to be fair, it’s also hard to solve. You have to know what to make (anyone saying “JUST LISTEN TO THE CUSTOMER” can log off right now and go back to LinkedIn, thank you very much), be able to make it, and be willing to make it. Man, I get tired just writing that and thinking about it. Thing number two — doing stupid things, or doing non-stupid things poorly, or in a stupid way — isn’t as existential or exciting, but it’s usually more solvable, and boy is it absolutely everywhere.

My hilarious, fulfilled, and generally very successful Dad has given me various bits of advice over the years, but none better or more applicable to everyday life than my favorite:

Don’t be an idiot“.

It’s really an amazing philosophy, and I’ve put a lot of effort into living it every day, even in the face of investors, coworkers, managers, customers, vendors, and countless others almost constantly pressuring me to, in fact, be an idiot in some way. It doesn’t always make me the easiest person in the world to work with, but in the end my dogged insistence on not being an idiot has done wonders for me and many — if not all! — of the companies I’ve worked for.

Despite this, “don’t be an idiot” has not caught on with the business community. Maybe it’s not sexy enough. Maybe it sounds too harsh (although I thought it was cool to be harsh again, I dunno). Maybe, just maybe, high-visibility business ventures increasingly require key stakeholders to act like idiots more than we’d like to admit. But either way, “stop doing important things in stupid ways” just doesn’t seem to be a rallying cry employers are comfortable building their workplace cultures around. Instead…

For whatever reason, we keep coming back to this fantasy that if people work EXTREMELY HARD (not just “hard”, but “so hard that a description of the work makes the Wall Street Journal think people will stop and read about this and feel like something significant is occurring in the world”) the things they do will be extremely, powerfully not-stupid, and thus those things will have value and progress the business forward towards, you know, glory and what-have-you.

Well… let me assure you, as a seasoned professional with 20 (!) years of high-tech (well, mostly high-tech), growth company experience — working super hard and being a counterproductive idiot are not, I repeat, not mutually exclusive. In fact, the whole reason work-life balance even exists in a country where everyone is obsessed with their career and terrified of not being rich in the event they ever encounter even a moderate medical challenge, is because working too hard actually causes you to become an idiot and do stupid, counterproductive things at work. These things range from bad ideas, to yelling at people, to forgetting important things, to major industrial accidents, to being Boeing. All of them are bad, and businesses would almost certainly make more money and deliver improved customer experiences if we did/had less of them.

“Companies are in control again!” Eh, I dunno. I think companies were kind of always in control, since most people work for companies not because it’s fun, but because they are financially dependent on those companies for survival. Really, companies have just gotten tired of trying to create environments where their employees don’t do stupid things, probably because doing so is a vague, difficult and emotionally unsatisfying process.

Sending a picture of yourself pretending to sleep in your office to the Wall Street Journal is pretty stupid — you might even say “idiotic” in the context of building a successful technology product — but it’s not vague, it’s not especially difficult, and to people who feel limited in their ability to actually improve the performance of their businesses, it’s probably somewhat satisfying.

Again, I’ve been working for a long time. And I know that overworking can be a thing really competent, awesome people do that, if managed very carefully, sometimes leads to amazing results that are hard to get in normal working cadences. I totally concede this, and I have allowed myself, my wife, and even some direct reports to occasionally overwork, knowing that I am running the risk of encouraging idiocy in myself or the people I care about. I do understand the tradeoff, I have pulled all-nighters, and I have in fact produced things that came out so good, and so cool, that they made me laugh deliriously at some ungodly hour of the morning. I’m sure I sounded not unlike… an idiot.

BUT, in general, most idiotic things aren’t the wild-eyed second-order effects of genius leaving the body. They are just… stupid, and bad. Things like the worst kind of bloated PowerPoint, hundreds of poorly considered, off-the-cuff Google Doc comments, charts in SaaS apps that don’t make any sense, the entire HubSpot user interface, and other unfortunate outcomes.

Making overworking a requirement, instead of something to manage effectively and with some degree of caution, doesn’t open the floodgates to genius. It opens the floodgates to charlatans and delusional go-getters who are willing to sleep in the office after a long, exhausting day of making bad, impulsive decisions and generally making everything harder for everyone else, including you and your customers. If that’s what you’re going for in 2025, I’m neither all that surprised nor especially interested in hitching my wagon to your future success.

Work is Weird, Weird is Hard

One cool thing about life, or at least my life, is that as I’ve gotten older and moved around, I’ve gotten to know some people who do jobs that I’ve always been aware of, but actually know very little about. The challenge with these kinds of jobs (and there are a lot of them) is that people tend to conflate awareness that the job exists with any sort of actual knowledge about how to do the job, or at least what the challenges of doing the job are. In reality, other than things that affect all jobs (“we are overworked, our boss is an idiot who hates us”, etc.), most of us have no idea.

“Air traffic controller” is a great example of a job like this, although to my knowledge, I don’t personally know an air traffic controller. But it checks all the right boxes for confusing the public — air traffic control as a concept makes sense, we’ve all been affected by it directly, it’s in the news, it’s in movies, we play little video games about it, and so forth. When I think “yeah, I get what they’re going through up there” (and sometimes I do this) I’m obviously wrong about that, but I think my misplaced confidence is at least understandable.

The thing is, I’m just a guy. The fact that I lack high-level self-awareness of my gaps in how the national air traffic controller network works (or does not work) is not a huge problem for society, as long as I don’t vote for idiots, I guess. Unfortunately, there ARE people who are in charge of large, sweeping decisions that affect — and are affected by — the actual work of being an air traffic controller. It does matter if they lack this kind of situational awareness, and according to the Verge, evidently they do.

Because of this whirlwind of activity, Rocheleau expected that Newark would soon be able to increase its flight volume by 25 percent, or nearly 12 additional flights per hour. 

Or, as Kirby put it, “This is such a seminal turning point for not just the near term but the long term of Newark.” 

Within two days, all three men were proven wrong. On the evening of June 4th, a shortage of air traffic controllers forced Newark to issue a ground stop, delaying more than 100 flights for several hours. Another staffing-related delay occurred four days later. Optimism alone cannot solve infrastructure problems that have been decades in the making.

The Verge piece continues, explaining that despite a brief, reactive surge of technical resources and equipment, a massive shortage of air traffic controllers — people — ultimately took down the system almost immediately.

“If your job is so complicated, how come you work for me?”

People’s fundamental misunderstanding of on-the-ground effort feels like the root of so many problems today. We have strong opinions about manufacturing, but we don’t know how actual things get made. We have strong opinions about immigration, but we don’t know who these people actually are or what they actually do. The management class (a group I belong to, theoretically) is in the throes of a truly bizarre delusion that has them convinced content parsing and generating algorithms are about to take over useful, necessary work from people, and have actually started preemptively reducing headcount needed to do this work today.

The blind spot I’m describing is really just human nature, I guess, but it does seem to dominate problem-solving more than ever before. Some potential social factors encouraging this are well-documented, like the fact that modern America was built by a generation that collectively participated in a giant global conflict where everyone left was just glad they didn’t die, whereas today the military is highly professionalized and most people never serve in it at all. Maybe that’s it — Stephen A. Smith Hot Take Culture ™ and every other modern example of people popping off without feeling the need to really understand the topic at hand can all be traced back to that, but I don’t know, and it does seem like it’s getting worse. Algorithmic, short-form-video-world isn’t helping, but I can’t tell if it’s a cause, or an effect of this whole thing that just happens to reinforce the trends that inspired it.

I’m not sure what the solution here is. It’s equally absurd to restrict opinions or observations to people with direct experience in something, so to me that’s a non-starter. We can’t all become experienced in everything (this is why the “I do my own research” thing is such a problem), either. For me, getting into management was really helpful because it was in a field and with a team that had me as a direct contributor, so I was under no illusion I suddenly knew how to do my former peers’ jobs better than they did (they were also not under this illusion, and more than happy to express it to me when I needed to hear it). But authority actually seems to have the opposite effect on a lot of people, where it instead makes them comfortable dictating the larger strategy or resources behind a function without even a basic, existential awareness of the work itself. For me, leadership was consistently very humbling, but instead I frequently see leaders using their position as a leader itself to justify whatever their decisions turn out to be.

And maybe that’s ultimately the issue. There will always be a need for someone to make decisions they don’t have a lot of first-hand experience with. How things go for a business, or a society, or even a family are going to be determined in large part by how those decisions get made, and more specifically how those decision makers handle not knowing enough to make the right one.

Life is not a real-time-strategy game. It’s not designed to be solved by one, brilliant person. The pieces are way more complicated, and unique, and weird, and sometimes the same piece that literally doesn’t do anything for half the game becomes incredibly, existentially important when you least expect it. So many things that need to get done are weird, and specific, or stupid and broken and require someone to make a decision or concoct a good-enough solution that simply doesn’t exist in any “training data”, whether its used by a machine learning model or an MBA candidate. Trust me, I work in digital marketing right now. If I’m being honest, I do a lot of repetitive administrative work that should be automated, in theory, but the reality is that most of the automations built (by me or by vendors) with the intention of doing so are broken and unreliable because the inputs (and outputs) are bespoke and inconsistent. No one wants to do this work less than me, but I keep doing it, because I know how to ingest a typically random scenario and cobble together an environmentally-appropriate answer. Whether you’re sponsoring an event or landing a plane, that’s… that’s the work, man! Forget it at your peril.

The Nothing App

I’m 43 years old, and I’ve been consuming technology products and working in tech basically my entire life, minus a year and a half where I worked for a catalog that sold garden gnomes. Nobody’s perfect.

But the “tech industry”, if that’s still a thing we can demarcate, has some real existential problems right now, the main one being that it appears to be completely out of ideas. Well, maybe not so much out of ideas, but out of ideas that aren’t just various commercialized versions of tech products and platforms senior executives read about or saw in movies as kids.

Elon Musk and Sam Altman are two of the most well-capitalized guys on the planet. No matter how much money they lose, for whatever reason investors are happy to continue shoveling money into whatever they want to do, and that comes at a pretty significant opportunity cost — try getting a job in technology right now that isn’t about generative AI, for instance. It’s doable (I did it!), but it’s really, really hard. But these two guys are really sucking up just an almost incomprehensible amount of venture capital and pouring it into… I guess NVIDIA? And that definitely has a non-trivial effect on the marketplace of available ideas.

Still, the worst part is that… none of this is going anywhere, at all. These companies will probably, for a fairly long time, have really high paper values that these two guys (and others) will be able to use as collateral to borrow money, avoid taxes, and live like kings forever, sure. People will use ChatGPT, other people (probably less) will post on Twitter, and all of those people will make stupid cartoon pictures of themselves through prompts. Musk is cynical enough to know he needs to be integrated with the government — and in particular, defense — to generate the guaranteed, endless revenue stream he needs to finance his nerd fantasies, and he may succeed at that.

But… “the everything app” these guys are obsessed with is not coming. They’re not going to build it. No one is! There’s been a lot of corporate consolidation over the years (too much, in fact), but one thing that remains extremely numerous are apps. In the 2010s, Facebook clearly wanted to be “the everything app” — maybe it still does! But they had years to figure it out, infinite money, and an ambitious, sociopathic super-dork running the show, just like these guys — and they got nowhere at all with that.

We don’t need an everything app. We have an everything device, the phone. And all this capital is going towards trying to put an unnecessary, platform eliminating app layer on top of it even though (a) there’s nothing in it for consumers, who control some parts of their phone experience, and (b) there’s nothing in it for Apple or Google, who control the rest. The most incredible achievement Sam Altman has pulled off is convincing Wall Street (and the media, and even Apple and Google to some extent) that chatbots somehow undermine this moat, when they do not, at all, in any way. I mean… Facebook even tried to make a phone! They knew what was up!

(Search is different. Google dropped the ball on search and now their offering is bad enough, and hard enough to get value from, that ChatGPT’s bullshit machine is good enough for people, which is just an incredibly damning sign for the quality of search in 2025. But there’s actually money to be made/lost in someone getting search right, or at least less wrong than it is right now.)

This whole Ready-Player-One everything app idea is just a giant waste of money that will never turn into anything real. And real, interesting ideas and iterative improvements to things you’re actually going to use will continue to wither on the vine until we accept it and move on.

Wholly Lawless

This is an insane sentence to read in a story on a federal court ruling:

There is little to no evidence to support a “vague, uncorroborated” allegation that Kilmar Abrego Garcia was once in the MS-13 street gang, U.S. District Judge Paula Xinis wrote. And in any case, she said, an immigration judge had expressly barred the U.S. in 2019 from deporting Abrego Garcia to El Salvador, where he faced likely persecution by local gangs. 

“As defendants acknowledge, they had no legal authority to arrest him, no justification to detain him, and no grounds to send him to El Salvador — let alone deliver him into one of the most dangerous prisons in the Western Hemisphere,” Xinis wrote.

I’ll put this bluntly. There are many policy positions you can hold that — even if crazy — can fit inside the framework of American society and government prescribed by the U.S. Constitution. You can call different ideas “left-wing”, or “right-wing”, or talk about the importance of “liberty” or “security”, and in most cases that can fit inside some still-defensible idea of how the United States could/would work.

However, the idea that the executive branch can unilaterally declare someone removable from the country, provide no proof, ignore the laws and procedures that legally require them do so, send them to a prison in El Salvador, and then declare that the person cannot be returned because they are now outside U.S. jurisdiction is fundamentally incompatible with not only the U.S. Constitution, but the basics of western law and morality that predate the formation of the country. It is, with zero exaggeration, a blank check for the administration to do anything they want to anyone with no repercussions. They just have to say you are in this gang, and you can be whisked away and never seen again.

For America to function as you expect it to (whether you are aware of this or not), the executive branch absolutely must provide some justification for what they are doing, and there absolutely must be a defined, pre-described forum for providing it and allowing for some form of pushback or counter-argument from the person that it is being done to, and all of this must be overseen and adjudicated by someone who is not the executive branch. It doesn’t matter if the person is a citizen or not, because if the government isn’t required to do this for everyone, they can just declare that someone is not a citizen and do whatever they want to them, because in that world ICE or the Army or the State Department or the USDA or whoever would apparently have the right to simply take any action they want and then wash their hands of the situation because the person has been sent off to some godforsaken prison hundreds or thousands of miles away. 

This is so stupid and obvious I can’t even believe it needs to be stated. If you can’t understand this, I sort of feel bad for you, but mostly I am enraged you are such a useless, non-contributing member of our democracy, because it is so unbelievably uncomplicated that I struggle to see any reason other than willful, borderline malicious ignorance for not finding this completely outrageous and unacceptable. You absolutely do not need to be some political egghead to wrap your arms around the idea that the people and institutions who get the guns and the keys to the prisons need to have absolutely ironclad limitations placed on them and that those limitations cannot be defined or interpreted by them. If a bunch of farmers and shopkeepers and blacksmiths were able to figure this out and do something about it 300 years ago (at tremendous personal risk!), I feel like you can get there too.

And hey, if for some reason you can’t get around the idea of non-citizens having rights of any sort (that’s your problem to figure out, but I won’t die on that hill here), remind yourself that this is not about anyone’s positive rights, this is about fundamental restrictions on what the government can do. It’s a check on them, you dummies, not a perk of being a citizen, because if they can do this they can just take away your perks whenever they want and they don’t have to give a reason or explain anything about that reason to you, a judge, or your freaking family, who will never see you again.  

Good lord. I spent four years sort of lazily piling up credits and stumbling out of college with a political science degree, and for the most part I felt silly because it seemed like all I learned was “how America works”, which I sort of knew anyways, and which seemed like something everyone here would have to learn just walking around and living life, or else society would collapse. And maybe I was right, because now that most people don’t seem to know any of this, the Republic does actually appear to be in some form of collapse. 

Intentionally Spread Thin

OpenAI is shoving more stuff out the door that seems very early, very ambitious, and very janky.

OpenAI is releasing a “research preview” of an AI agent called Operator that can “go to the web to perform tasks for you,” according to a blog post. “Using its own browser, it can look at a webpage and interact with it by typing, clicking, and scrolling,” OpenAI says. It’s launching first in the US for subscribers of OpenAI’s $200 per month ChatGPT Pro tier.

Operator relies a “Computer-Using Agent” model that combines GPT-4o’s vision capabilities with “advanced reasoning through reinforcement learning” to be able to interact with GUIs, OpenAI says. “Operator can ‘see’ (through screenshots) and ‘interact’ (using all the actions a mouse and keyboard allow) with a browser, enabling it to take action on the web without requiring custom API integrations,” according to OpenAI.

One thing I learned working in all these tech startups is that the easiest way to solve extremely difficult “last mile” problems is to get distracted by something else and work on that instead.

All done.