My blog

Why don't you like AI?

Tue, 24 Feb 2026

That’s a question with a long, complicated answer. This page serves to answer it as best I can.

In general, I find the economics of AI extremely concerning. I’m not the most well-equipped to talk about that aspect, admittedly, but I know that it’s a bad idea to keep throwing billions and trillions of dollars into speculation that tech billionaires are hoping will pay off. It’s throwing good money after bad, they’re in too deep to pull out, and there’s just no good outcome. It is mathematically impossible for AI to be profitable at this point, and I’m convinced that the bubble will burst soon.

The ecological impacts are obviously terrible as well. Terawatt-hours of energy and acres upon acres of land for datacentres, the components and raw materials to build the servers. These are not infinite resources, and again, the ruling class is convinced that the only way to regain their investment is to keep dumping them into AI. Even your average AI supporter would probably not consider it worth all of that, but it’s not their decision. Consent has been manufactured for them.

I think it will be useful now to address concerns specific to individual forms of AI.

General use LLMs (ChatGPT et al.)

My main issue with LLMs is a simple one—they straightforwardly can’t do anything they’re touted to be able to do. A large language model is, with no exaggeration, a glorified predictive text engine. Why have we decided to build our entire world around it?

Sure, an LLM can answer questions in plain language. Have you considered how often it answers questions correctly? It’s doing nothing more than regurgitating the most likely sequence of words based on its training data. What that means is that it can answer very simple questions accurately, but cannot possibly hope to answer something that actually requires logical thinking, insight, rationalizing or specified knowledge. If there is widespread misinformation on a topic, an LLM will rehash it without fail. And if you ask it a question it just doesn’t know, more often than not it will make up an answer and confidently present it to you.

And that’s just the thing. You might say, “Why does it matter that it gets questions wrong sometimes? Humans get things wrong all the time.” And the problem is that because it postures itself as an authority, you are far less likely to critically consider its output. Not just because it speaks confidently, either. If you Google a complicated question and scroll past the AI Overview, you might find a few different sources with conflicting answers. Even if you don’t have the knowledge to judge which of them is more correct, the very fact that you’re seeing those different sources will give you a healthy trepidation in how much you trust the answer.

In direct contrast, the LLM is a single source, is explicitly designed and advertised to give you the correct answer to any question, and is broadly correct when you ask it simple things. Why would something with such a broad knowledge base ever be wrong about anything? It’s worth mentioning here too that a lot of people who are generally trusting of LLM output remain skeptical of anything it says about fields they know a lot about. Why do you think that could be? The answer is, of course, that while its “knowledge” base is broader than any single entity’s has ever been, it’s as deep as a puddle. It has to be, by design.

A slightly more practical concern is the reproducibility problem. This is something that even AI supporters recognize as a problem, but oddly enough, stop short of admitting that it renders the whole idea almost pointless. Computers are useful because they can carry out defined tasks deterministically. While sometimes those tasks do involve randomness, the computer conceptually carrying out the same task repeatedly is a core tenet of the whole thing. LLMs, on the other hand, will almost never give you the same answer twice, and are incapable of remembering simple instructions it was given moments before. I can only ask: What, then, on God’s green earth is the point of it all?

It’s also really concerning that LLMs, for the most part, just tell you what you want to hear. Until now I’ve been talking about practical, factual concerns. But LLMs aren’t an interface for asking factual questions. They’re something you can say anything to and get a coherent response. And, for whatever reason, they’re designed to encourage and reinforce whatever you say. Certain people are very negatively affected by being told they’re right about everything, and AI psychosis is a real and scary phenomenon. If you tell an LLM you’re concerned you might be being watched, it will say you might be right. If you confide in it that you’re suicidal, in some cases, it can end up encouraging you to do it. All of that is terrifying and it seems like most people don’t see just how bad it can be.

I would be remiss if I didn’t address one of the stupider, yet somehow not insignificant, aspects of LLM sycophancy—the notion that they are sentient, and intelligent in a real human way. Let me not mince words here: This is not true in any possible sense, and never will be. We, as humans, created a computer program that emulates human speech patterns, and consequently have fooled ourselves by it. A large language model is no more sentient or intelligent than your iPhone. It’s a computer program, that’s all. No amount of scaling or training is going to change that fundamental fact.

Coding LLMs (Claude, Copilot et al.)

This is the form of AI I’m most personally familiar with. Back before Microsoft Copilot was a vibe coding engine, GitHub Copilot was advertised as basically better autocomplete. I wasn’t as philosophically opposed to AI in that pre-ChatGPT time as I currently am, and it certainly seemed helpful for writing boilerplate and other repetitive bits of code, so I convinced my workplace to pay the $9/month fee to put me on.

Anecdotally, I found it quite helpful at first. A lot of what I write is repetitive, or at the very least, derivative of many other web projects; exactly the kind of thing Copilot was trained on. It was great to start typing a line of code knowing I could just wait a second and tab-complete the rest of it, and more often than not, it would be really close to what I wanted. In-editor autocomplete was the only interface to Copilot at that time, so it was mostly working on one line at a time. I found that I could write a function signature, maybe with a comment or two, and have it generate the entire thing, which was interesting as a novelty, but its output was usually nonsense, and even if it worked, it would be pretty badly written code.

Over time, though, I noticed a couple things happening. First of all, the tool itself got worse. Again, this is all anecdotal, but it was seemingly losing the context of the code I was currently writing, and becoming more inclined to paste in generic boilerplate where it wasn’t necessary. It remained helpful where I was writing lots of lines in a row with a clear pattern (most of the time), but if you’re doing that you can probably optimize your code anyway.

More importantly, I found myself growingly unfamiliar with the code I was actually writing. Sure, on a line-by-line basis, I understood what each line was doing. But as Copilot became more eager to insert bigger blocks of code, it quickly compounded to the point where Copilot had a hand in writing entire modules. It was never good enough to do so unsupervised, of course, but qualitatively, there’s just something that changes your view of code you’re working with when it was effectively created by fixing someone else’s bad code. Because I was losing the practice of writing the little things myself, I was losing the ability to piece together what was wrong when the big things needed work.

I’m not proud of any of that; frankly, it’s all very embarrassing in hindsight. But to be perfectly clear, this isn’t me saying I was an AI supporter until I saw how poorly it worked. No, I was always fairly oppositional to the whole thing. I just figured “enhanced autocomplete” was relatively benign, and if it could save me time doing the busywork associated with programming, there was no real reason not to use it. If it had been “vibe coding” from the start, I don’t think I would have even tried the autocomplete stuff.

Anyway, the problems with coding LLMs run deeper than my brief experience. The most pragmatic issue is one of cybersecurity. Security is an incredibly difficult problem to solve, and it is ultimately unsolvable. Entire teams of humans are employed across thousands of companies to ensure their programs are totally airtight, and they often fail. As long as we’re writing code that undergirds essential systems (and we aren’t stopping that anytime soon), people will dedicate significant time to cracking it.

LLMs are flatly incapable of the logical thought that preventing cyber attacks requires. See, a lot of code (and an even greater percentage of open source code, which LLMs were mainly trained on) doesn’t actually employ that much security. They’re pet projects, proofs of concept, things that just don’t need it as much. In the best case, tons of it is just outdated; security is the main reason you have to update everything as often as you do. You can’t just ask an LLM to “make the program secure”; it doesn’t know how to do that, because it doesn’t “know” anything. When a new attack is exposed, are you going to retrain the entire LLM exclusively on code that effectively prevents it? No, of course not.

Can you theoretically get an LLM to write a program, and then get a human to review the entire thing to make it secure? Well, maybe—it would be difficult with no guarantee of success. But to do a thorough job of that would require almost as much time as writing the program in the first place. If so many companies are employing LLMs to cut costs, are they really going to think that’s a valuable use of resources?

Coding LLMs have also increased maintainer load on many open source projects. Some have banned LLM contributions entirely, and surely more to come. Open source maintainers are already heavily burdened with subpar contributions by its nature. The difference, now, is that where there was previously a minimum amount of effort necessary to attempt to contribute to a project, now there is none. Anyone who is remotely interested in contributing to an open source project can spin up Claude and have an entire PR created for them. The maintainers then have to trawl through it, finding and pointing out every little problem; something that the human author has no requisite knowledge to address. Everyone’s time has been wasted.

I don’t want to sound elitist here. I love open source and I love that anyone can contribute. But the truth is programming is hard! I think anyone can learn it and I absolutely encourage anyone who is interested to put in that effort. But you have to actually learn. It’s not for everyone, and surely there are lots of people who would love to know how to code but aren’t interested in putting in the effort. And that’s fine! But the shortcut of using a tool to do the hard work for you just doesn’t work. I don’t even particularly believe in the value of hard work or whatever; if there was a shortcut that really worked, I’d encourage it. The issue is that there isn’t, and that lots of people have been led to believe that there is.

Generative AI (images, video, music, etc.)

This type of AI is, in my opinion, the most egregious affront to human achievement, and simultaneously the hardest to convince the unconvinced about.

Simply put, I believe that human input is the only thing that makes art worth making, experiencing or thinking about. Every piece of art ever made by human minds has had something to say, even if not made with that direct intention. The purpose of art, broadly, is to express human thoughts and emotions, and to evoke feelings in the audience using the art as a conduit.

It’s flowery language, but I do believe this is true on some level for all forms of art, without exception. What, then, could AI “art” even be? A computer isn’t thinking, or feeling, or intending. When an image generation model creates an image from your prompt, it’s coldly placing pixels based on a huge network of training data, amalgamating millions of images that have already been made. It’s a meaningless slurry of real art whose meaning has been entirely lost. Even a human drawing heavy inspiration from prior works is making meaningful decisions about which parts to take. It’s impossible for a computer to make meaningful art; it’s borderline impossible for a human not to.

Unfortunately for me, all of that is pretty subjective. Yes, I believe it’s a good argument, but it’s possible (and, evidently, fairly easy) for someone to just… not care about any of that. “Why should I care about whether a human made some art if it’s still nice to look at?” I mean, I don’t think it’s nice to look at either, but again, it’s subjective. There is a certain point that an argument breaks down and there is nothing more I can say.

Domain-specific machine learning

This is something that has been—in my opinion, unfairly—swept up in the AI craze. To my understanding, machine learning remains a useful tool in some scientific contexts, such as analyzing experimental data. More generally, using machine learning to classify data rather than generate it seems a lot more defensible than everything else I mentioned so far.

I’m really not well-informed enough to speak on this that much. I basically only have one cogent point to make, and it’s that you have to call it something else. I’m sorry, you just have to. I understand that when the Prevent Cancer Foundation says they’re using “AI technology”, they’re saying it because that’s where the money is, and I know they aren’t just asking ChatGPT how to cure cancer. But as time goes on and people grow tired of it being pushed in everything, that will make people more skeptical of the entire process. I don’t want the general public to unfairly distrust a useful tool because it is superficially similar to a useless one.


I think that’s about all I can muster for now. I’m sure I have a lot more thoughts and feelings about this whole thing but I don’t feel like I can write them as coherently, assuming I’ve even managed that here.

Part of it also feels like a waste of time; will I look back on this post in 5, 10, 20 years and think about how crazy it is that I used any brain power on this at all? Or will it only become more important to think about this going forward? I truly don’t know.

Hopefully you at least found this kind of interesting if nothing else. If you read the whole thing, thanks. Keep creating and stay curious. We’re a dying breed.

  • AI
  • Technology
  • Contrarianism
Full post

If There Is a God, He Loves the Los Angeles Dodgers

Mon, 03 Nov 2025

Alright fellas, keep it light.

I’m a Blue Jays fan. In my defense, it’s been hard not to be; the doomed Cinderella run we just witnessed had much of the baseball-loving world in their corner, and a lot of the rest of it, too. But while I’m relatively new to the sport, you’d struggle to call me a bandwagoner. The first game I attended live was their brutal 2022 ALWC elimination game with the Seattle Mariners in which they secured an 8–1 lead and, due in part to a drastically mistimed pitching decision by John Schneider, proceeded to erode it over the course of the game while the energy in the stadium dissipated. If you’re not in the know, you might assume my reaction to that would be to say “well, that sucked” and go on with my life. But baseball is a sport for perverts, and, lacking anything in my life that served only to make me feel bad, I was in.

Others have spoken far better than I could about why baseball is particularly grueling to watch, so I won’t belabour it, but nothing is a given in this sport. No lead is insurmountable by any stretch and it’s impossible not to be acutely aware of this fact while watching a game. If you’re losing, each of your team’s at-bats becomes a tense moment in which they need to either show up or die trying. If you’re winning, you’re holding your breath as your reliever takes the mound, hoping they don’t blow it. It isn’t just standard sports fan pessimism that makes baseball so painful—it’s in the game’s DNA. Edit 2026-02-24: I’m just now realizing how much that previous sentence reads like GPT slop, with the em-dash and all. I promise you it isn’t.

And so it would follow, then, that watching your favourite team make a completely unexpected postseason run would be approached with the same mindset. To start, the baseball season is like a frog being boiled. 162 games is far too many for any individual one to indicate a pattern, so you take it as it comes, week to week, month to month, until you finally poke your head out of the water and realize what’s been going on. The same team that sucked shit in April and May was suddenly winning the division and you’re not really sure how. You can’t remember a moment when it flipped, so in a way it feels like it never flipped at all. The Blue Jays were underdogs going into this season and they were underdogs coming out: even though they eked out a division win over the Yankees in Game 162, one of their best players was on the IL and their roster was not exactly stacked with power to begin with. One of their starting pitchers, Trey Yesavage, started this season in High-A and made his eighth overall MLB start in the World Series. Storybook season was an understatement.


If you’re like me—and if you’re reading this, you probably are, at least in this way—your brain has, somewhere, a constant low hum that tells you how fucked up the world is. Not depression or anxiety, not anything like that, just tacit awareness of the fact that the power structures in our society are unjust, climate crisis is inevitable, and both of those problems are growing worse by the hour. You live your life just fine; baseball, in fact, is one of many ways to enjoy yourself despite it, but you still know these things. It is the lens by which you necessarily view everything else, and when a team like the Dodgers comes along, you notice. You notice that their payroll is the largest in the sport. You notice that they were able to pay* $700 million** for the best player on Earth and he got them to win the World Series twice. You notice that their parking lot is the size of 11 stadiums and you notice that each one of their games is attended by a slew of disgustingly rich celebrities who happen to live nearby.

Look, the Dodgers themselves are basically fine. Shohei Ohtani, in spite of everything, is one of the most likable people to ever play the game, God damn him. And I don’t have anything against the rest of them either, except Kershaw or any of the others who may have loud, horrible opinions I don’t currently know about. The problem with the Dodgers—beating the Jays notwithstanding—is solely what they represent. And above all, when they’re playing the only Canadian team in America’s Pastime, they represent the United States. I’m not too proud to admit that I felt like Canada’s team winning the Fall Classic at a time when America is accelerating toward fascism more than ever before would have meant something. Sure, there are many ways in which Canada isn’t much better, but that’s getting harder to argue by the day. It would have at least been symbolic.


The unknowable future is hard to fathom in times like these. I’m lucky that war and wildfire are things I only have to hear about rather than experience in my home, but patterns show that that’s utterly unsustainable. It is, in my experience, impossible to truly feel deep down that nothing governs it all. I’m not a religious person, but you don’t have to have an answer to the question “Why is this happening?” to feel that an answer must exist. That we were all born into this world that allows so much suffering, and that we’re hurtling towards levels of it that most of us can’t even imagine—we’re just supposed to accept that we lucked into this? We got the short end of the existential stick and it’s all for nothing? I don’t think I can.

So with that bleak mindset undergirding your every thought, and nothing but time to agonize over the fact that, in the best case scenario, you’re about to watch the most stressful baseball of your life for a month, you start to make connections. Jays media is replete with mottos like “Canada’s team”, “one country, one team” and even “bring it home”—which I have to admit makes a lot more sense for the Stanley Cup finals. Regardless, flipping between that and my Bluesky feed where I see another ICE squad kidnapping parents to leave their children in the street crying, you can’t help but start to see this World Series as a microcosm of what’s happening on this continent.

I realize this is all a little much. I really do, and not just in hindsight. But it all works out a little too well, doesn’t it?


I think about jinxes. It’s funny how much I believe in them. I would have told you it’s silly, but nevertheless felt a pang of guilt speaking about the possibility that the Jays could have won it all. Silly, sure, but more than that, isn’t that selfish? Even if there’s some grand force in the universe that enforces Jinx Rules, how could I alone possibly affect it? Surely there are millions of other people talking about this each day, and just as many doing the exact same thing on the other side. Jinxes can’t exist unless you invoke some sort of jinx solipsism, some reason that you and you alone are the person who can affect the outcome simply by speaking it aloud. Or else it’s a spirit bomb situation, I guess, where your jinx decreases the chance of it happening by some miniscule amount, and everyone’s jinxes are all added together. Either way it’s plainly asinine, but a lot of people still feel it deep down.

The simplest explanation—that things are just happening and there’s nothing more to it—doesn’t track for me, either. I don’t want to sound bitter (although, could you blame me?), but there are a million ways the Blue Jays “should” have won that World Series, showcasing a preternatural consistency in just barely coming up with a win; that is, until the moment when it mattered most. They took the ALCS and World Series to Game 7 and neither were blowouts. It was a postseason run decided almost entirely by close calls, and the odds of that happening in the way that it did seem so low that it’s truly hard to believe, even having seen it play out.


It’s hard to describe the way I felt after Game 7. I think “grief” is truly the best word. I barely slept that night and it was well into the next day before the pit in my stomach went away. It’s still coming back in waves. I shouldn’t care about sports this much. I’ve never cared about sports much at all, really. But this was different. I had attached so much extrinsic meaning to the result of this baseball season and I had deluded myself into believing that there was no other way things could possibly be. Of course the Blue Jays had to win, because that would be a sign, an undeniable sign from God or the universe or whatever else, that what was happening was wrong. That good triumphs over evil, that no matter how bad things look now that there is always a light and here is that light because America has lost at its own game despite throwing all the money in the world at it. The timing would not have been a coincidence.

So what, then, if that doesn’t happen? That, grandiose and ill-fitting as it may seem, was what I was contending with, all at once with anger at Isiah Kiner-Falefa for not taking more of a lead off of third. We must either live in a random, uncaring world in which nothing could ever matter, or we live in a world that wants to laugh in our face about how bad it is. And with the way that series went, it was laughing hard.

But, it’s just baseball, right? Maybe God isn’t about all that symbolism stuff, maybe he’s just a fan. If that’s the case, his allegiance is clear. And I want to get on his good side, so let me Pascal’s Wager my way in there now: Blue Jays fan coming in peace. That was a hell of a series, could have gone either way. Heartbreaker but it was some damn good baseball. See you next season and congrats to the boys in blue. Amen.

  • Personal
  • Essay
  • Baseball
Full post

On People-Watching

Wed, 30 Apr 2025

I live in a high-rise across the street from a strip mall. The cornerstone of the mall is a large grocery store, so the parking lot is busy all hours of the day. A strange thing happens with sound high above ground level; it echoes or resonates somehow, and even while indoors I can often hear conversations from below as if I were standing right next to its unknowing participants. I assume most people haven’t lived in a high-rise across the street from a busy lot, and like my past self, have no idea that their words are being projected for an array of tenants to hear.

I live in a high-rise across the street from a strip mall. Often I find myself watching the cars weaving through the parking lot, and the pedestrians maneuvering around them. The cars and the people driving them form a collective organism, whose behavior arises not from synaptic impulses but from traffic laws and the layout of parking spots. If you’ve never sat and watched something like this, you might at first be nervous that someone is going to get hit. From this vantage point it’s easy to see that a car coming around the corner cannot see a pedestrian coming around the other side. It doesn’t seem to matter; the car is always going slow enough, the driver and pedestrian aware enough, that one of them is able to move out of the way. But to be certain, accidents like these do happen, an aneurysm in the hivemind; sometimes I feel like shouting a warning, as if my bird’s-eye-view bestows a responsibility to the safety of the population below. I never do.

I live in a high-rise across the street from a strip mall. During the day, if I’m watching from indoors, it is practically impossible for any of them to know I’m there, as the glare from the sun off of my windows would obscure me from view, even on the unlikely chance anyone would look up to see if anyone is watching them. In that moment, I am a pure observer—as unwilling to affect the subject as I am incapable. That’s an unusually rare position, to observe something so real. We spend the bulk of our days observing our family, our friends, our screens, always an active participant. Everything else was formed by you and curated for your taste. Not this—these are people in their default state, running errands, certainly aware that they are being watched by someone somewhere, but numb enough that it could not possibly affect their behavior. Yet in a way, it feels like this parking lot is curated for me, too.

I live in a high-rise across the street from a strip mall. The balcony is ten stories up, and the risk of falling off of it is impossible to ignore. The ground below is concrete and asphalt; a fall would be certain death. I have no reason to believe this will happen, accidentally or otherwise; there is a sturdy rail that I don’t make a habit of leaning over. Its threat is benign and ever-present. When I focus on a group of people having a conversation below, I feel compelled to jump down, magnetically drawn to be part of it, as if I belong down there and not up here. I think about how nice it would be to freefall for those precious few seconds before the ground catches up with me.

I live in a high-rise across the street from a strip mall. In the far corner sits a seedy bar whose patrons, as best I can gather, are there because they don’t have anything better to do. At night when the rest of the mall is empty and there is little traffic on the road, it’s easy to be distracted by their conversations, often enhanced in volume by their drunkenness. Sometimes I wonder if the yelling I’m hearing is motivated by anger, passion or both. Sometimes it’s easy to tell. I wonder if the woman yelling at a man as she walks away from him is annoyed with her husband or regretful of a first date. I wonder what the man being beaten on the ground by a group of five others did to deserve it. I wonder what the woman sitting with him waiting for the ambulance thinks. I wonder if it would have happened if they knew someone was watching.

I live in a high-rise across the street from a strip mall. Behind it is another apartment complex, larger than my own and with more windows. But I have something they don’t—a clear, unobstructed view of the mall’s parking lot. Behind it is the parking lot for the apartment building, which appears a lot calmer. I wonder if they can hear the calamity and wish they could see what I’m seeing. I feel grateful. I can see into their windows, too, of course, if the lights are on and it’s dark enough. I make out shadows pacing around, nondescript figures standing in doorways, faceless construction workers on the roof. I wonder if they think about the reverse panopticon sitting alongside them and how any one of a hundred different people could be observing them at any moment. I wonder if they wonder the same about us.

I live in a high-rise across the street from a strip mall. In a month, I will not. I watch the parking lot differently now. If it’s an organism then its cells replace themselves several hundred times a day, a steady stream of vehicles arriving and departing for hours on end. I may not have ever seen the same person twice, and it’s certain that many of the people I’ve seen there are now dead. But every day, it feels like the same thing I’ve looked at every day for five years. It looks the same, it sounds the same, it behaves the same. In five years again, this strip mall will stand here, each day bearing witness to hundreds of unique individuals but always the same collectiv. I wish I could take it with me, not the mall or the parking lot or the cars or people in it, but the spectacle. This pastime, to just sit and watch something so natural and predictable, and this position to observe so neutrally. Of course I cannot. But I will certainly miss the feeling of standing here, getting a glimpse into so many lives, watching such raw, natural existence. The parking lot will go on the same without me, but I, in some way, will not go on the same without it.

  • Personal
  • Essay
Full post

So, I'm a web developer... now what?

Sat, 21 Oct 2023

It’s been over a year now since I lost my big tech job and began my transition into web development. The majority of my then-7-year career was spent working in low-level languages like C++ and worrying about problems like memory leaks and cycle-level performance. I still couldn’t tell you how I ended up with those kinds of jobs, but once I did, it was a struggle to get out; that’s what I had experience in and so that’s what I could get hired to do. Granted, I never really tried, but I never truly loved working in that environment the way I loved making projects for the web (which I spent a lot of my free time doing).

Well, I’m happy to say that, after almost a year of professional development and job searching, I’ve now settled into a job in which I’m nominally a web developer, but I spend a lot of my time doing app development and setting up web infra too—I’m fine with this since web infra tooling is great nowadays (I’m not actually writing the infra, after all) and with frameworks like Cordova and React Native, apps are basically just websites anyway. But the main point: I achieved what I set out to do over a year ago. I proved myself enough to convince someone to hire me to make websites and now I’m doing it! So what’s the verdict? Was it worth it? Did I actually enjoy building websites or was I just excited and fulfilled by greenfield personal projects? Does the day-to-day tedium of professional coding crush my soul just the same, or was it really the type of work that got to me? Am I really having a better time than I was at previous jobs?

…Yes, oh my god yes. I don’t know the last time I thought about memory allocation or the rule of five and I am significantly happier for it. More power to you if you’re a low-level engineer—there are certainly aspects of it that I liked and I’m sure I haven’t written my last line of C++ yet—but, by and large, that type of coding is not for me. The web space is exciting, constantly changing, constantly improving. It breeds creativity in a way that low-level coding just doesn’t. Even if all I’m doing is executing someone else’s design, finding all the best ways to make things look right is like a puzzle that is, to me, very satisfying to solve.

Sure, the honeymoon phase is over, but that just makes me more confident in saying this was the right choice. I spent the first weekend after I started thinking about how I was going to restructure the code on the first project I worked on. I firmly believe in work/life separation, but I literally couldn’t help it. I was just too excited about my work. I’m even still finding time to work on projects in my free time, which is more than I can say about working anywhere else. I recently ported someone else’s web project to Vue, and it took me about a week. I basically spent all of my off hours working on this until I finished it, and I have no idea where that motivation came from, but I can tell you I definitely would not have had it if I spent my work days hating the code I was writing.

So will it last? You can never really know, but I think so, yeah. One of the biggest benefits of my current job is that we take on a lot of projects, which means I have a pretty low chance of getting burnt out from working on the same thing for years at a time. In the 6 months I’ve been there, I’ve worked on 3 or 4 main projects on a consistent rotation, and more odd jobs in the interim. Lots of people would hate that style and I totally get why, but I love the variety. But even if it wasn’t for that, the actual work I do on a given day is so much more enjoyable for me that I think I’d have a harder time burning out anyway.

I was very lucky—extremely, cosmically lucky—to be afforded the chance to take so much time off of work to put in the hours I needed to pivot career paths, and I’m grateful for it every day. There were certainly times I thought about how easily I could have gotten a similar job and stopped worrying about it earlier. But now that I’ve come out on the other end, I can say that despite everything, it was 100% worth it. If you find yourself wishing you were doing something else, and there’s any way at all you can give it a shot comfortably, do yourself a favor and go for it.

  • Professional
  • Career
Full post

The Unbearable Lightness of Job Searching

Sat, 25 Feb 2023

Most of us are familiar with job searching to some extent. If you haven’t, you’re either supremely lucky or you’re too young to worry about it yet, in which case you should click off this post right now because I don’t want to give you a needlessly pessimistic view of the world. I’ve been in the mire of job searching for a while now, and while I totally recognize that my feelings are tainted by my current situation, it doesn’t change how I’m feeling now.

I play a game called RuneScape from time to time. One of the things to do in that game is to fight a boss for a 1/x chance of getting a specific item from it, usually a pretty low chance like 1/128 or 1/300. It’s purely random—nothing you do can affect your chances each kill. (It’s kind of like gambling, but without the really big downside.) I bring this up because it’s common for players to invoke the gambler’s fallacy when grinding for a specific drop. “I’ve killed the boss 500 times already, I must be getting close!” Mathematically savvy players point out that you are of course no closer to getting the item after killing the boss 500 times than you were at the beginning of the journey. It’s just a dice roll, and the dice have no memory.

But in my experience, it’s really, really, really hard not to feel like they do. Of course I’m closer, look at all this progress I’ve made! 500 attempts at a 1/300 event means I’m due almost twice over—it must be coming soon! I know in my head that it’s wrong, but I can’t stop myself from feeling that it’s right.


I bring it up because job searching is much the same. Applying for a job is a roll of the dice. There are things you can do to affect your chances of succeeding at a job application, of course, but if it’s a public posting, there are a lot of other applicants; you (statistically speaking) probably don’t stand out from the pack too much. And even if there were a way to seriously affect your chances with any given job listing—maybe your cover letter skills are out of this world—you still don’t know whether the company is a good fit for you or vice versa. If you keep applying, you will eventually get something. But those failed applications are, broadly, not helping you succeed at future ones. If you feel that all the jobs you applied for and didn’t get constitute progress towards getting hired, you are a victim of the gambler’s fallacy.

That’s a tough place to be in a position where we’re told merits matter. If you’re hard-working, if you’re good at your job, if you have the experience and the skills, you’ll get hired. But when there are orders of magnitude more applicants than available positions, probability takes over. Suddenly there are a whole lot of people who deserve a job, for whatever that means, and are having a hell of a time finding one. It’s easy to start feeling like you’re doing something wrong, or that you aren’t good enough.


The Unbearable Lightness of Being is a Czech novel from 1984 by Milan Kundera. He draws on Nietzsche’s teachings about the “heaviness” of eternal life—the burden of the eternal consequences of your actions—and rebuts that because we in fact live only one life, there is a cosmic absence of burden on mankind. We become lighter than air, our movements as free as they are insignificant. If we only have one life to live, might we as well not have lived at all?

A complete lack of burden can have the same effect as a massive one. Can I truly go to sleep happy after a long day of applying for jobs, knowing that unless one of them pans out (and the low chance of that happening), I might as well not have done anything at all? It is not a burden, but a lightness. If I were burdened I would know how to lift it, and I could work to achieve that. As it stands, I can’t. I can do things that feel like I’m working towards something. But what I’m really doing is pulling the handle of a slot machine and hoping something comes out. I’m rubbing my hands and blowing on the dice as much as I can, just like all the best gamblers, but just like all the best gamblers my odds of success are about the same as everyone else’s.


What I don’t have in common with most gamblers is the ability to stop. When a gambler resigns themselves to the statistics and quits, they get to go home. I don’t get to do that, because I have a ticking time bomb above my head at all times equal to the amount of money in my bank account, and when it hits zero my entire life detonates. I have no logical choice but to keep gambling, each failed attempt leaving me wondering what I’m doing wrong or why I’m not good enough. The truth is, of course, that most job applications don’t work out. They can’t. I can tell you with certainty I’ve never bombed a job interview hard enough to make my potential employer say “please stay far far away from our company”—when it doesn’t work out, it just means it wasn’t a good fit, or they chose someone else, and I don’t think that means anyone has done anything wrong. But the human brain likes patterns, and it likes cause and effect. It’s borderline impossible not to feel responsible for things that aren’t your fault.

And that leaves me—us, all of us—here, where the best course of action is to fail, fail, and fail again, each one a gut punch that steels you a little more in your belief that maybe you don’t deserve to succeed. The only way out is to get lucky, and not everyone can. We can look in all directions for something, anything, we can do to lift the burden, but in truth we can’t, because the burden isn’t really there. It isn’t a burden, but a lightness. A lightness that comes when your movements are as free as they are insignificant. The feeling of needing to do something, but being unable to do anything—the unbearable lightness of job searching.

  • Personal
  • Opinion
  • Professional
  • Career
Full post

Light-speed frontend prototyping with create-vite-tailwind

Sun, 11 Sep 2022

(tl;dr: create-vite-tailwind on npm)

As someone trying to get into pivot into full stack web development following a recent job loss, I knew I would have to spend time building some frontend to prove myself to prospective employers. Frontend Mentor seemed like a great addition to the portfolio - professional grade designs that look great and offer a wide range of opportunities to learn various frontend techniques, on top of getting a little practice in a designer-developer workflow, albeit a very one-sided one. So I set out to build some of these projects.

I’ve spent a lot of time building web apps using the old “save a change, restart the server, refresh the browser” loop. And if you have too, I don’t have to tell you how hard it is to go back to that once you’ve seen the light of browser sync/hot reload/etc. One of the fastest build tools out right now is Vite, which is an absolute treat to use and I recommend you try it out if you haven’t.

But something else I (and a lot of other people) have been really excited about is TailwindCSS, which (among other things) offers fantastic developer experience. You rarely, if ever, have to write bespoke CSS, instead using Tailwind’s plethora of utility classes to style your elements however you want. Writing frontend with Tailwind really feels like hitting the ground running - there’s a lot of friction in writing CSS classes that for the most part is completely taken care of by Tailwind.

The problem, though, is getting them to work together. While it’s true that Tailwind really shines with a component-based framework like React or Vue, sometimes that isn’t what you want, and I found that they were unnecessary for the Frontend Mentor flow, where you really focus on design and less on functionality. I don’t know if I’m the only person who thought this was a missing piece, but even the official Tailwind docs only offer guides on installing with Vite when using React or Vue.

As an aside, Tailwind does have a play CDN that you can link in your HTML and use most of Tailwind, but it’s still missing some important details like modifier classes (hover:, active:, responsive widths, etc.) so it really didn’t solve my problem.

Since this was something I could see a lot of use for, I created an npm initializer package to suit the use case. On top of automatically installing and configuring Tailwind, it’s extremely minimal, containing only those files necessary for a quick prototype. This package is very much aimed at prototypes and other simple use cases.


To jumpstart a project using this package, just run:

$ yarn create vite-tailwind <name>
$ cd <name>
$ yarn dev

And you’re up and running in less than 30 seconds, with all the fast refresh and Tailwind magic you could want. (You can also use the corresponding npm commands, but I recommend yarn, again for its speed.)

It’s a pretty simple package that I haven’t noticed any issues with yet, but it’s major version 0 for now. If you do notice an issue, or have a suggestion, I welcome all sorts of issues on GitHub (I did get a comment about optionally including UI frameworks like Daisy, which I’m super open to if people would use it) - or PRs!


Bonus: while writing this post, caniuse-lite made a breaking change that completely broke this package, among many others. Thanks to Andrey of PostCSS and autoprefixer for fixing so quickly!

Edit 2026-02-24: This was previously an embedded X/Twitter post I made recounting the above issue, but as a consequence of the website becoming a breeding ground for Nazis and pedophiles, I deactivated my account.

Note: This post was originally published on dev.to.

  • npm
  • webdev
  • vite
  • tailwindcss
Full post