AI can be incredible to help you to think for yourself. You shouldn’t use it to think for you, but I believe that currently it’s being used too much this way.
This page is built by myself, with artisinal handcrafted code, and not vibecoded. It’s a hobby project and I like writing code and tinkering around. Programming is fun!
The content on this page is written by me, and the thoughts are mine, and not the thoughts of an AI. I use AI to proofread and improve the grammar of things I write. I’m not a native English speaker, and I don’t want people to struggle to read my thoughts.
I’m switching models from time to time, so I can’t point to one model that I’m always using. I always tell it to “just fix grammar, don’t change anything else”. I do not use it to translate posts (i.e. I don’t write them in German and let it translate to English). I write posts in English and then let an AI tell me grammatical issues. I don’t even copy-paste the improved post, and instead let the AI list me the issues and explain them, so I can type the improvements myself, because that’s how I can learn from it.
When you see me using em dashes ”—”, it’s because I like to use them deliberately. See also: I’m using em dashes—but I’m not an AI
Some posts have header images. They are usually AI-generated. Sometimes (but rarely) there are also small illustrations in the content that are AI-generated. These images exist to make a funny point or just be cute, to make posts visually more distinct from each other, and are just a design element.
I’m a terminal-boy. I like to use my editor and my terminal. So right now, I still always have a code editor open in front of me to look at code, and a terminal with OpenCode next to it. That might change over time, who knows. It’s just what I always come back to.
When you ask me how something in my codebase works, I can point to the code and explain how it works. I believe this ability is highly necessary. When there’s a bug, I can often anticipate the root cause (and its fix) even before looking at the code. I am designing the architecture; I’m anticipating how the codebase will evolve over time, and I steer the codebase into this direction. I am making the tradeoffs. I’m doing the thinking, the code consists my opinions, and I’m using AI to help me think for myself and have well-founded opinions.
I must keep this ability, regardless of whether I’m writing the code or an AI is writing it. So I’m using AI in a way that keeps my ability to know how something in the codebase works.
My coding sessions are often more like a supercharged pair programming session. I’m reviewing while the AI is writing the code, and I intercept when I encounter an issue that I didn’t fully think through.
When you’re writing code by yourself, you often notice that something cannot be implemented like you initially planned. You notice something needs to be refactored or something is missing. And you take care of that: you solve that new problem instead of hacking around it.
You do this because doing the workaround will haunt you and bite you later. You can already feel the pain.
An AI doesn’t feel this pain. It happily builds a hacky workaround that’s horrible to review, and you probably don’t understand why it exists or what it does.
The problem is that you can’t see where this workaround starts or why it even exists. You will just see a bunch of code you didn’t anticipate. Dissecting it after the fact, even with the aid of AI, takes more time than just catching it when it happens.
Over time, a codebase establishes a set of repeating patterns: you can copy a section, paste it somewhere else for a new feature, and adjust it slightly without breaking the pattern. That’s a good thing, and I’m heavily embracing it.
I am providing all these patterns, I’m thinking about them, I’m doing the research and reading how to write it in an idiomatic, smart, simple, and easy to understand way. My codebases almost exclusively consist of these patterns. In this process, I use AI to help me think for myself: doing research, understanding it, digging through libraries without good docs.
When I’m copying a pattern that I wrote and change some variables or function calls, am I still “writing code”? When I was blindly copying code from StackOverflow many years ago, was I “writing code”? When AI copy-pastes and adjusts some code from another file, is it “writing code” or was I “writing code” because I told it to do exactly that?
It’s complicated!
The answer is: my code is shaped by me. Sometimes “shaped” means that I actually wrote it or refactored it; sometimes it means it’s my pattern but written by an AI. As long as I know how the code works, what it does, and why it’s written that way… does it really matter if I wrote it, copied it, or told an AI to write it?
I’m not a fan of switching between dozens of parallel agent sessions. I do not believe that you can hold all of this context simultaneously in your head. It results in a waste of money, energy and mental capacity.
Some work needs my full attention and it’s the only thing I’m working on, to maximize my focus and minimize context switching. There’s also other work that’s easier to parallelize. It depends.
I do not believe that chat is the right interface to interact with most AIs. It’s annoying af.
I do not believe that “letting AI write code” is the future.
I believe that AIs will be part of a software, but not as an LLM, or yet another agent chat in a product. I believe we won’t even need to write all that code anymore. An AI will actually be that algorithm. It will replace non-trivial algorithms, to make decisions that are easy for humans to make, but difficult to write as code. For this to happen, AI has to become very cheap, reliable, and fast. It will open up a plethora of new products that feel like magic, instead of shoving a chat UI into your face.
I believe that part of a software engineer’s job will be to implement these AIs and their coordination, probably in a way that doesn’t yet exist. We’re not there yet.
AI can be incredible to help you to think for yourself. You shouldn’t use it to think for you, but I believe that currently it’s being used too much this way.
This page is built by myself, with artisinal handcrafted code, and not vibecoded. It’s a hobby project and I like writing code and tinkering around. Programming is fun!
The content on this page is written by me, and the thoughts are mine, and not the thoughts of an AI. I use AI to proofread and improve the grammar of things I write. I’m not a native English speaker, and I don’t want people to struggle to read my thoughts.
I’m switching models from time to time, so I can’t point to one model that I’m always using. I always tell it to “just fix grammar, don’t change anything else”. I do not use it to translate posts (i.e. I don’t write them in German and let it translate to English). I write posts in English and then let an AI tell me grammatical issues. I don’t even copy-paste the improved post, and instead let the AI list me the issues and explain them, so I can type the improvements myself, because that’s how I can learn from it.
When you see me using em dashes ”—”, it’s because I like to use them deliberately. See also: I’m using em dashes—but I’m not an AI
Some posts have header images. They are usually AI-generated. Sometimes (but rarely) there are also small illustrations in the content that are AI-generated. These images exist to make a funny point or just be cute, to make posts visually more distinct from each other, and are just a design element.
I’m a terminal-boy. I like to use my editor and my terminal. So right now, I still always have a code editor open in front of me to look at code, and a terminal with OpenCode next to it. That might change over time, who knows. It’s just what I always come back to.
When you ask me how something in my codebase works, I can point to the code and explain how it works. I believe this ability is highly necessary. When there’s a bug, I can often anticipate the root cause (and its fix) even before looking at the code. I am designing the architecture; I’m anticipating how the codebase will evolve over time, and I steer the codebase into this direction. I am making the tradeoffs. I’m doing the thinking, the code consists my opinions, and I’m using AI to help me think for myself and have well-founded opinions.
I must keep this ability, regardless of whether I’m writing the code or an AI is writing it. So I’m using AI in a way that keeps my ability to know how something in the codebase works.
My coding sessions are often more like a supercharged pair programming session. I’m reviewing while the AI is writing the code, and I intercept when I encounter an issue that I didn’t fully think through.
When you’re writing code by yourself, you often notice that something cannot be implemented like you initially planned. You notice something needs to be refactored or something is missing. And you take care of that: you solve that new problem instead of hacking around it.
You do this because doing the workaround will haunt you and bite you later. You can already feel the pain.
An AI doesn’t feel this pain. It happily builds a hacky workaround that’s horrible to review, and you probably don’t understand why it exists or what it does.
The problem is that you can’t see where this workaround starts or why it even exists. You will just see a bunch of code you didn’t anticipate. Dissecting it after the fact, even with the aid of AI, takes more time than just catching it when it happens.
Over time, a codebase establishes a set of repeating patterns: you can copy a section, paste it somewhere else for a new feature, and adjust it slightly without breaking the pattern. That’s a good thing, and I’m heavily embracing it.
I am providing all these patterns, I’m thinking about them, I’m doing the research and reading how to write it in an idiomatic, smart, simple, and easy to understand way. My codebases almost exclusively consist of these patterns. In this process, I use AI to help me think for myself: doing research, understanding it, digging through libraries without good docs.
When I’m copying a pattern that I wrote and change some variables or function calls, am I still “writing code”? When I was blindly copying code from StackOverflow many years ago, was I “writing code”? When AI copy-pastes and adjusts some code from another file, is it “writing code” or was I “writing code” because I told it to do exactly that?
It’s complicated!
The answer is: my code is shaped by me. Sometimes “shaped” means that I actually wrote it or refactored it; sometimes it means it’s my pattern but written by an AI. As long as I know how the code works, what it does, and why it’s written that way… does it really matter if I wrote it, copied it, or told an AI to write it?
I’m not a fan of switching between dozens of parallel agent sessions. I do not believe that you can hold all of this context simultaneously in your head. It results in a waste of money, energy and mental capacity.
Some work needs my full attention and it’s the only thing I’m working on, to maximize my focus and minimize context switching. There’s also other work that’s easier to parallelize. It depends.
I do not believe that chat is the right interface to interact with most AIs. It’s annoying af.
I do not believe that “letting AI write code” is the future.
I believe that AIs will be part of a software, but not as an LLM, or yet another agent chat in a product. I believe we won’t even need to write all that code anymore. An AI will actually be that algorithm. It will replace non-trivial algorithms, to make decisions that are easy for humans to make, but difficult to write as code. For this to happen, AI has to become very cheap, reliable, and fast. It will open up a plethora of new products that feel like magic, instead of shoving a chat UI into your face.
I believe that part of a software engineer’s job will be to implement these AIs and their coordination, probably in a way that doesn’t yet exist. We’re not there yet.