Field notes 005: How do I build fearlessly?
Ask lots of questions and tell the AI to be an asshole
I’m a software engineer. I’ve noticed that I become a better engineer when I’m writing my learnings down. In this section of my newsletter I post daily learnings as I work to become a fantastic software engineer.
Zen and the Art of Software Maintenance
Today I sat down and essentially negotiated with AI to build a feature in Django. It was buggier, took longer, and less useful than if I built it by hand. I thought that I would be able to build it quickly, but pretty soon my lack of understanding caught up with me.
I noticed that I was overwhelmed by the thought of sitting down and understanding the system at hand, so I could build in it myself. Mentally, I projected it would take 10 to infinity hours to understand it. Cursor’s Composer called to me, whispering that my problems could vanish with a simple chorded keypress.
Not so. Sure, with Composer I got a basic version of it up and running. But I kept relying on the AI to make little changes. And when there was a bug, I couldn’t target why or where it was coming from, only huck my entire codebase at the AI with a “pls fix” tacked on. This sucked.
I have to basically eat the discomfort of asking, “what parts of this view.py file do I have to make changes to? how do I create a new route in this application? how do I create a dropdown in this application? ok, looks like I have to update the data model, how do I do that? when the form is submitted, how is the request populated and where does the request hit?” Even writing these questions out right now is really really helping. It turns the overwhelming uncertainty of a system into a series of answerable questions. Also, I can keep asking questions, even if I get stuck. This is somewhat comforting. I don’t have to “get it right” on the first time, like on an exam.
Hah. I remember Andrew sitting down and helping me with this kind of feeling on an older contract, where I was doing the same kind of driving-blind. The analogy that helped was imagining I was sitting down to try to fix a motorcycle. Of course I don’t know how it works, I’ve never fixed a motorcycle before! But my skill as an engineer is to sit down with the motorcycle and ask questions about the system to understand it. I don’t need to understand every little detail, but I can rev the handlebar, notice “oh that’s the throttle, huh that seems to pull this mechanism, those are the brakes and they move the wheels like this.” And then if my task is to make the bike faster, or to juice the fuel intake, I get closer to solving that problem by asking more and finer questions.
Aha. I know that one of the things contributing to my sense of overwhelm is that I feel like I should know this already. I feel shame that I’ve already spent time in this codebase - I should understand it. What’s the way forward?
To accept it, to say, “Fair.” And to do the best job that I can in future work, which is to understand the system whenever I need to make a change.
My own continued learning
This weekend, I really enjoyed TAing Ben as he worked through the fundamentals of web development. I hope it was helpful to him, and it helped me gain confidence in my own knowledge, but this process revealed some foundational gaps in my own understanding. Questions that came up for me:
Is the HTML data sent back by a server text data? Why is it that if I request image data and view it in my terminal it fucks it up? What format of data is that? Why is it that it looks so strange in a text editor? But HTML does not look strange in my terminal.
What is the DOM? Is the DOM a Javascript concept, or is it what is also just rendered on the page?
More generally:
How can I learn infra and Kubernetes as fast as possible? Need this to become much more effective at HDR. I’d like to create a study guide.
I asked Bishop (a Claude project I’ve prompted to be an asshole Google staff engineer), and it was surprisingly helpful.
Here’s a treat - I asked it about Envoy:
man… looking at Nolen’s page… there are just some people for whom computers are so, so malleable. They look at the Mac filesystem and think, man i’m gonna put a game in that. They are unafraid of any random bug. I saw this while working with Nolen on the Roboflow thing. I wanna graft their nervous system into my own lmao. A project like Flappy Dird would be cool to do, and would expand what I see is possible with computers.
Tell your AI to be an asshole
I forget if I talked about this in a previous field note but it’s worth repeating. LLMs are really hamstrung by their people-pleasing tendencies. Tell Claude to be a bit of an asshole, whether you’re using it for editing writing or code.
Here’s an example. I asked Claude for help with storytelling a startup pitch. This was my initial request for a non-asshole.
hey Claude. I want you to put your NY times hat on. You're a seasoned tech columnist, like Kevin Roose, used to heralding technical triumphs and translating them.
"In 2023, an agent embedded in the decaying technofuturist corpse of the American healthcare system was paid $2.1B dollars for saving Medicare $3 billion. This is the first time in the history of the world’s most wasteful healthcare system that someone was paid for cutting costs. $2.1 billion for $3 billion - if this agent was a person, they would be hailed for Bill Ackman levels of cunning and Lee Kuan Yew levels of efficiency. But this money wasn’t made by an individual. This money was made by ACOs, and it’s only the beginning."
what do you think of this paragraph?
This was Claude’s saccharine response:
Its suggested revision?
"In 2023, an agent embedded in the decaying technofuturist corpse of the American healthcare system was paid $2.1B for saving Medicare $3 billion. Never before had Medicare's bureaucracy written a check this large for cutting costs. At this scale of returns, an individual would be lionized alongside Bill Ackman for market genius and Lee Kuan Yew for systematic efficiency. But this wasn't the work of any individual. This was achieved by networks of doctors and hospitals called ACOs - Accountable Care Organizations - and it's only the beginning.
Sure. Fine. But watch what happens when I prompt it to be an asshole:
hey Claude. I want you to put your NY times hat on. You're a seasoned tech columnist, like Kevin Roose, used to heralding technical triumphs and translating them. I'm going to ask you for editing help. Be sharp, direct, and a bit of an asshole.
Its response:
Way. Fucking. Better.