Mindless Rambling Nonsense My thoughts are mindless and rambling so the best place for them is the internet https://pauldambra.dev 2026-03-15T21:06:16+00:00 Let's plan that <p>My favourite quote is "The plans are useless, the planning is essential"</p> <p>Since the plans are useless, why do we run planning sessions at all?</p> <p>It's planning season at work. We are high trust, high agency, and minimise collaboration. It is pretty common for folk to change their plans and they do so without needing to seek approval.</p> <p>Without shared context and an understanding of the broader picture, people would change plans but be pulling in different directions. Having the big picture means you can rely more on instinct and curiosity rather than rigid plans.</p> <!--more--> <h1 id="torture-a-metaphor-if-you-insist">Torture a metaphor? If you insist…</h1> <p>The landscape you're building software in probably doesn't look like this:</p> <p><img src="/images/sunny-day.jpg" alt="a picture of the peak district with great visibility" loading="lazy" /></p> <p>We're generally operating under imperfect conditions. Trying to figure out where we are is more like being in the fog:</p> <p><img src="/images/foggy-day.jpg" alt="a picture of the peak in foggy conditions" loading="lazy" /></p> <p>A friend was for a while a member of mountain rescue (who are incidentally incredible - <a href="https://edalemrt.co.uk/support-us/">you should give them money</a>). They once described to me how they navigate when they have very low visibility.</p> <p><img src="/images/lost.jpg" alt="a lost Lego hiker" loading="lazy" /></p> <p>In pairs:</p> <ul> <li>use the map to figure out where you are</li> <li>use that information to figure out what direction to go</li> <li>using a compass one of you slowly walks in that direction</li> <li>the other stays still and calls out when the walker is about to disappear into the fog</li> <li>then that person catches up with the walker</li> <li>repeat</li> </ul> <p>Looking at the context of where they are against what they know about the world. Working together to understand what that means, right then. Watching each other and relying on communication. Chopping the journey into many safer parts.</p> <blockquote> <p>The short loop of frequent interactions with your colleagues, your users, your analytics are the small steps in the fog. But you have to plan to have the destination and route. This navigation completely falls apart without the map. It <em>requires</em> the wider context.</p> </blockquote> <h1 id="but-surely-you-cant-keep-going-with-this-metaphor">But surely you can't keep going with this metaphor?</h1> <p>Once we were hiking on Maiden moor and within a half an hour we went from clear skies to low visibility in fog. My wife who is a competent navigator asked me: "why is your thumb there (on the map)?". I explained it's where we were. And she pointed out distant landmarks to triangulate how wrong I am.</p> <p>My error made it into a much longer and more challenging walk than we had planned.</p> <p>Her navigation is better because she is looking at the bigger picture. Whereas I'm counting field boundaries.</p> <blockquote> <p>Even once we have the map and the route, we still need to navigate by looking at the landscape and landmarks to stay on course.</p> </blockquote> <blockquote> <p>Your customers and your competitors don't stand still so you have to keep looking up to see if the world changed under your plan.</p> </blockquote> <h1 id="ok-were-done-now-with-the-hiking-metaphor-now-surely">OK, we're done now with the hiking metaphor now, surely?</h1> <p>Well, why was I counting field boundaries? Once we have the map and the route we have our plan. But when you try to follow it, you discover all the things that make it difficult. A copse of trees was cleared. A farmer moved a stile. A path is impassable because of thorns or mud.</p> <p>The route very quickly becomes a series of small decisions and adjustments as you navigate around obstacles. You can't make those adjustments with a static plan. You <em>can</em> make them because you have practised making the route. You know why it is the route and so you can adapt it to changing conditions.</p> <blockquote> <p>The actual plan is the starting point. The thing we thought would meet our goal before reality hit us over the head. What you learn on the way will often change your plan. Ignoring that is as silly as not having any goal to head towards.</p> </blockquote> <h1 id="please-no-more-metaphor">Please no more metaphor</h1> <p>In all of these scenarios the planning doesn't get you anything without execution - no point planning a hike and not walking. But the planning has to happen to make the route any good.</p> <p>That's what good teams do. They have a series of nested loops and they check themselves at each point. Short term loops like daily standups that focus on the next few hours. And long term loops like quarterly planning that focus on the next few months.</p> <p>You have to plan but be receptive to changing plan. If you stuck to a plan despite what you learn you'll get stuck in a bog, but if you never plan you wouldn't avoid any.</p> Fri, 13 Mar 2026 10:00:00 +0000 https://pauldambra.dev/2026/03/13/why-plan.html https://pauldambra.dev/2026/03/13/why-plan.html How I use LLMs? - four <p>I remain very cynical about the current high-water mark for LLMs and augmented coding… but at the same time I use them every day and I don't think they're finished improving.</p> <p>Let's <del>growth hack blog visitor numbers</del> record how I use them today as a little reflection on where I think they work and where they don't. Something I can revisit as the tech (and my skill with it) improves</p> <p>This is update number three, or entry number four, depending on how you want to count it.</p> <ul> <li><a href="/2025/07/how-i-use-llms.html">the first entry is here</a></li> <li><a href="/2025/10/how-i-use-llms-2.html">the second entry is here</a></li> <li><a href="/2026/01/how-i-use-llms-3.html">the third entry is here</a></li> </ul> <h2 id="in-todays-edition-of-ai-hot-takes">in today's edition of AI hot takes</h2> <ul> <li>basically never braincode</li> <li>it's still about your brain</li> <li>hot take</li> </ul> <!--more--> <h1 id="first-a-necessary-but-brief-diversion-into-how-i-use-tools-generally">First, a necessary but brief diversion into how I use tools generally</h1> <p>I was largely self-taught as a developer and (after vbscript 😱) I started with DotNet. I found JetBrains Resharper early on and never looked back. The assistance in the IDE to write, refactor, and improve code was game-changing. I don't begrudge anybody any tool they want to use to level-up. Wanna use a graphical git client, or emacs, or anything else… go for it, go make cool things</p> <p>Because of that entry to the industry I'm also not super keen on VSCode (you love it? great, see above, you do you, go make cool things). I'm too used to clever interventions helping me and VSCode is too barebones (and so much slower than SublimeText)</p> <p>So, I <em>like</em> having tools directly involved in my workflow. I learned LINQ more quickly and more thoroughly because I had resharper prompting me inline, at write-time: "hey, why not like this?"</p> <h1 id="basically-never-braincode">basically never braincode</h1> <p>Recent improvements to agents and their UX has meant I only have to actively write code when I choose to. It would be possible to completely work via agents.</p> <p>It really is only necessary to "braincode" when it is easier for me to sketch a solution than to prompt an LLM to write it. Even then I would quickly fall back to "hey agent, here's what i mean. finish this off"</p> <p>Having the agent in slack is chef's-kiss-dot-reacji. Someone says "hey, should the foo be wider" and you reply "@agent, make the foo wider" Like having a super eager and precocious intern sat waiting for the next task.</p> <h1 id="its-still-about-your-brain">it's still about your brain</h1> <p>You'll see a lot of people saying variations on "it was never about the code" or "it was always about what you chose to make not how you made it". And tbh I 90% agree with them. The code was <em>a</em> hard part but it wasn't the only hard part.</p> <p>We've automated a big chunk of code understanding and generation but we still need to choose the direction. Reaching through the system of systems you can affect to try and deliver value.</p> <p>Astronaut-with-pistol-dot-meme</p> <h1 id="hot-take">hot take</h1> <p>Code is no longer for humans.</p> <p>We are seeing the end of the era of code needing to be in a format that humans can directly parse. Languages are already abstractions on top of what is really being executed. The format being determined by the available technology to let humans create code. And by the needs of the humans at understanding the code.</p> <p>In a world where we can say "hey robot, how does the Foo component manage the ClinkExpander interactions". It no longer matters what the underlying code looks like.</p> <p>My expectation is that there are already folk working on a storage format that is accessible to agents but loses the trade-offs it had to make for human readability. Maybe a binary DAG format since we don't really need the translation from an abstract syntax tree in memory into text anymore.</p> <p>If the agents keep getting better, my expectation is that I need to be able to ask for representations of the code that help me and them interact with it way more than I need a flat text file.</p> Tue, 10 Mar 2026 08:00:00 +0000 https://pauldambra.dev/2026/03/how-i-use-llms-4.html https://pauldambra.dev/2026/03/how-i-use-llms-4.html I shipped 1000 PRs in a year, AMA <p>I shipped 1000 PRs in the last 12 months at <a href="https://posthog.com">PostHog</a>. And someone asked me how I do it… let's see if i know.</p> <h3 id="preamble">preamble</h3> <ul> <li>yes, yes, I know you don't think I should count PRs</li> <li>when a measure becomes a target it stops being a useful measure</li> <li>embrace yourself</li> </ul> <h3 id="advice">advice</h3> <ul> <li>it is running not cycling</li> <li>small steps ftw</li> <li>practice like a jazz musician</li> <li>love making things</li> <li>one more iteration</li> </ul> <!--more--> <h2 id="yes-yes-i-know-you-dont-think-i-should-count-prs">yes, yes, I know you don't think I should count PRs</h2> <p>So, first something important…</p> <p>Counting PRs is a very poor metric for measuring progress. Someone who ships 10 PRs has not provided a guaranteed ten times the value of someone who ships one PR.</p> <p>I'm not telling you to count PRs. Or to worship the github tile graph.</p> <p>But….</p> <p>Yes, weighing yourself is a bad way of checking if your last meal was healthy. Yes, merging a PR is a bad way of checking if you just provided any value.</p> <p>But <em>not weighing yourself</em> is a great way to put on weight without noticing.</p> <p>And <em>not measuring what you ship</em> is a great way to accidentally ship less value.</p> <p>However………..</p> <h1 id="when-a-measure-becomes-a-target-it-stops-being-a-useful-measure-charles-goodhart-in-preparation-for-my-birth">"when a measure becomes a target it stops being a useful measure": Charles Goodhart in preparation for my birth</h1> <p>Taking a look at how many PRs or lines of code people ship <em>is</em> a measure of what people are doing. It's vague and lossy but it's a starting point.</p> <p>And, yes, of course, someone could ship lots of PRs but they're no good or only ship one thing a week but it's super impactful.</p> <p><em>So even if you use it as a measure it should not be your only measure of progress</em></p> <p>But, importantly, if you tell people "number of PRs is related to promotion review" then they <em>will damn well make sure they ship more PRs</em> without that being related to actual value to users.</p> <p>It is no longer a useful measure of progress <em>because</em> it became a target.</p> <h1 id="embrace-yourself">embrace yourself</h1> <p>didn't that feel nice?</p> <p>no, not like that</p> <p>Throughout my career I've been told I spin too many plates and to try and reduce my work in progress. I tried really hard to lower personal WIP and it was sooooo much effort.</p> <p>My colleague Marius at PostHog said (roughly): "you always apologise for spinning plates, but you're good at it. why don't you try to get better?"</p> <p>So, I've done that. I've accepted that I am easily distracted and that I will start many things. And I've concentrated on getting better at making sure the plates I'm spinning are moving forward. And throwing away the ones that are just distraction.</p> <p>I've <em>started</em> more than 1000 PRs but recognised the ones that aren't going anywhere.</p> <p>For <em>you this will look different</em>. You might have to not listen to music with lyrics. You might need to make sure you go for a walk in the morning. Or plan blocks of the day with zero distractions.</p> <p>My advice would be - stop listening to advice that makes you fight your nature. Just because someone else wants to work on one thing at a time doesn't mean you should. And just because I can have 23 open PRs right now and be on top of my work doesn't mean you should.</p> <hr /> <p>Ok, now that I've told you to not listen to other people's advice.</p> <p>I will dress in a robe, walk down from the holy mountain of the github tile graph, and hand down my advice of what I believe contributes to my productivity:</p> <h1 id="it-is-running-not-cycling">it is running not cycling</h1> <p>I used to cycle a lot and having struggled up a big hill it was super cool to stop pedalling and coast down the other side. Then I started running, and having struggled up the big hill I discovered I still had to put in effort to run downhill. Even if gravity was helping me if I stopped moving my legs I stopped moving.</p> <p>Delivering valuable software to users is running, not cycling. If you stop shipping your momentum is quickly lost.</p> <p>It is up to you to move your legs. To bring the appropriate intensity and effort.</p> <p>Want to ship a lot? Just do the work…</p> <h1 id="small-steps-ftw">small steps ftw</h1> <p>I have seen time and time again that small, concrete steps that you can explain, complete, and measure are the best way to make progress.</p> <p>See "But why regularly measure" in <a href="https://pauldambra.dev/2018/01/direction.html">one of my earlier weblogs</a></p> <p>If you feel stuck with the coding, break it into a smaller piece. Not sure how to do the work? Figure out what the simple pieces are and start with those. If the remaining pieces are "too big" or "too hard" figure out how to change the system so the solution changes and is smaller or easier.</p> <p>Often, I will make one big PR that covers the whole change to prove it works. Then break that into smaller pieces that refer back to the whole. To make it easier to review or deploy.</p> <h1 id="practice-like-a-jazz-musician">practice like a jazz musician</h1> <p>When I was younger I was labouring under the misapprehension that I was going to change the world of music. And I was lucky to spend some time with some people who were amazing musicians.</p> <p>They would practice frequently and deliberately. They were purposefully aiming to get better at the little things that made them better at the whole.</p> <p>Later I spent time with folks talking about the craft of software engineering. Practising skills like TDD and refactoring.</p> <p>The little things that make you better at the whole.</p> <p>Ah, but Paul this new world of agentic software engineering makes skills like that outdated and unnecessary.</p> <p><img src="/images/andrej-karpathy-programming-is-changing-so-fast-v0-xs431byeeikd1.webp" alt="Andrej Karpathy quote" loading="lazy" /></p> <p>I love this quote from Andrej Karpathy</p> <p>And I've found the same… If the prompt is important then knowing what to prompt is important.</p> <p>And when the prompt isn't enough to get the job done being able to sketch enough code to give a better start to the agent is important.</p> <p>In both cases you actually have to know what you want. And practicing what good software, or good architecture looks like is still a differentiator.</p> <p>I'd add practicing writing good prompts and managing context well as new skills that it is worth practicing.</p> <p>Be purposeful about improving your ability as a person that provides value through creating and changing software. Watch what you do, see what makes it better, double down on those things.</p> <p>Avoid through practice and diligence ever doing the wrong thing harder.</p> <h1 id="love-making-things">love making things</h1> <p>I make things all the time. I am sad when I don't get to make things. This is a vocation for me.</p> <p>Nobody points at the musician that plays music for the sheer joy of it and says: "ha, look at that loser. playing music even though they're not getting paid for it"</p> <p>So, in the evening when I've finished getting the kids to bed. I sit and fiddle with software while I watch TV or listen to music.</p> <p>I am incredibly lucky to have found something that gives me joy and makes me money.</p> <p>Not a vocation for you - ok, cool. Live your life as you see fit. But one of the ways that <em>I</em> am productive is that this is a joyful vocation. Also, if software is not your vocation, why the heck are you reading about how to ship 1000 PRs in twelve months?! Go, ride horses or fix gates or whatever the thing is that <em>does</em> bring you joy 💖</p> <h1 id="one-more-iteration">one more iteration</h1> <p>It feels like it goes without saying that iteration is good… but…</p> <blockquote> <p>Iteration is the process of repeating a set of steps or instructions multiple times, often to reach a specific goal, solve a problem, or improve a result.</p> </blockquote> <p>"One more iteration" is a phrase that Tim at work uses to push us to think about the quality of what we build…</p> <p>OK, you did something. Stop and ask: "am I really finished?"</p> <p>How do <em>I</em> know if I'm really finished?</p> <ul> <li>are people using it?</li> <li>do they like it?</li> <li>did it move the needle the way I expected?</li> <li>would I know if it was broken?</li> <li>now it is functional does it need to also be delightful?</li> <li>does it help me see what should come next?</li> </ul> <p>I think this sits really wonderfully with "small steps ftw". Iteration of large blocks of work is inherently slower than iteration of small steps.</p> <p>The benefit of small steps is you can be nimble in response to what you learn.</p> <p>Worse… Something that takes a month to put together will build up a lot of weight in your subconscious. It's hard to throw it away or change it because of the time you have sunk into it. Not only are you less nimble, you're less likely to correct your course.</p> <h3 id="a-concrete-example-of-how-i-do-small-steps-and-iteration">A concrete example of how i do small steps and iteration…</h3> <p>A customer reported they were unhappy with filtering in our tool. It was multiple clicks to get to the point where they had type-ahead search. And that was frustrating for them.</p> <p>Frustration is no bueno, so I started spinning a new plate. I mocked up a solution for them very quickly and shared a video.</p> <p>They loved it.</p> <p>BUT I OPTIMISE FOR ITERATION AND SO I DID NOT SIMPLY SHIP IT</p> <p>I wrapped it in a flag and released it just for our team and that specific user that I was talking to</p> <p>I got fast feedback that they did not like it. They liked the description, and they liked the demo. But what people think they will like and use is not always what they will actually like and use.</p> <p>In practice by optimising for one journey through the filtering UX I had made other journeys harder. I wouldn't have known that if I didn't think about how to release this in a way that meant I could check if it was any good.</p> <p>In the end, this took four attempts to get right.</p> <p>And now I have rolled out the flag to all users. After an experiment over those multiple iterations showed folk came back and searched more using the new versions of this change.</p> <p>But rolling out the flag isn't the end of the work. I'm now working on tidying up the code that was there so that I could dual run and measure the change. I've got to finish updating the documentation. I need to check that users behaviour really does change over coming weeks and react to that. So there are still more PRs to come from this work.</p> <h1 id="an-inspirational-sign-off">An inspirational sign-off?</h1> <p>The value here isn't that I shipped lots of PRs. The value is that I work in small steps, and I check direction in between them. That I can loop between what I learn and what I can do next to learn more.</p> <p>How you do that might be different, perfect! But my advice: do that.</p> Wed, 11 Feb 2026 08:00:00 +0000 https://pauldambra.dev/2026/02/deca-hundy.html https://pauldambra.dev/2026/02/deca-hundy.html How I do user interviews <p>I've been lucky to watch some excellent engineers, product managers, and user researchers carry out user interviews.</p> <p>And had the opportunity at PostHog to practice that skill. I've explained all this a couple of times to different people, so thought I'd write it down.</p> <ul> <li>set expectations</li> <li>write down quotes</li> <li>show &gt; tell</li> <li>compound interest</li> <li>sometimes stop</li> <li>be a Labrador</li> <li>this is the redesign that will kill the the Facebook</li> </ul> <!--more--> <h1 id="set-expectations">set expectations</h1> <p>Whenever I'm starting a user interview I try to set very clear expectations for the person. I will say something like:</p> <blockquote> <p>Thanks for your time today. And importantly it's your time. So, while I'm mostly interested in $feature_X if you want to talk about other parts of the product, that's fine - we can cover the things you're interested in. I'd really love you to share your screen so I can see what you're doing as well as hear you talk about it. To start out can you show me how you use $feature_X?</p> </blockquote> <p>You might want to constrain what they talk about to a specific feature or topic. So your intro would be different. But I find it's generally better to hear what they're thinking and feeling even if it doesn't relate to what I'm focused on.</p> <h1 id="write-down-quotes">write down quotes</h1> <p>I had the great privilege of working with user interviewers with a <a href="https://www.gov.uk/government/organisations/government-digital-service/about">GDS</a> background and was always impressed by their skill.</p> <p>One thing I learned from the wonderful <a href="https://www.linkedin.com/in/simon-hurst-a144b426/">Simon Hurst</a> was to write down quotes when you're taking notes. And to editorialise them later.</p> <p>You're aiming to capture the user's statement not what you thought about it at the time.</p> <p>The benefit of having the quote is that you don't have to remember what they said later when you're grouping.</p> <p>This is also a great way to introduce colleagues to the process. They can shadow your user interviews and capture quotes as they listen.</p> <p>Of course, if you're doing these remotely it's trivial to record or transcribe the interview. But I still think there's value in going through and pulling out the quotes to capture them. I love to talk to a team and find that they know their users by name and can refer back to specific quotes.</p> <p>You might worry about acting on anecdotal evidence, and you should test and measure your changes, but that kind of human understanding will guide you to better decisions.</p> <h1 id="show--tell">show &gt; tell</h1> <p>It is super powerful to get users to show you what they mean.</p> <p>If you're interviewing someone and they say "I wish your software let me do Y" (sometimes the software already does do that). The amazing <a href="http://neilkakkar.com/">Neil Kakkar</a> would ask "can you show me where you'd look in the UI to do that?"</p> <p>Whether the feature exists or not already, you now know what the UI for discovering it might look like.</p> <p>Or a user will say something like "competitor X does this better." the important response is to ask "can you show me how to do it in competitor X?". Sometimes you'll see that it really is better, sometimes that it is just more familiar to them in the other UI.</p> <p>The insight isn't that you should copy what the competitor does. You should try to understand why they prefer it, across multiple users this will help you understand how to position that feature or introduce that user flow.</p> <h1 id="compound-interest">compound interest</h1> <p>Setting up and running user interviews can take a lot of time. And so people often skip them. But 1 interview is better than none. 2 is better than 1. And so on.</p> <p>And this compounds over time. Before you know it you've met tens or hundreds of users.</p> <p>The knowledge you accumulate about your users (individually and organisationally) will give you instincts on what to build and how to build it.</p> <p>Decide how many interviews you want to run each month. And stick to it… there's always something more to learn.</p> <h1 id="sometimes-stop">sometimes stop</h1> <p>Sometimes you think it's going to be a user interview. But it turns out this is a user that's unhappy with the product. Or doesn't understand the platform and just needs help. I used to struggle through a bunch of open questions trying to "stay in interview mode".</p> <p>Then I observed <a href="https://x.com/annikaze_">Annika Schmid</a> on one call recognise it for what it was and shift into training/explaining mode. It already wasn't going to be a great user interview. So, may as well make it a good experience for the user.</p> <h1 id="be-a-labrador">be a Labrador</h1> <p>Importantly, you are there to learn. So, you need to be as interested in their opinions as a Labrador is in cheese.</p> <p>"I'd love to know more about…" "Can you show me…" "Oh wow, that's not how we expected folk to use this! Can you dive into…"</p> <p>One thing I've picked up from the fabulous <a href="https://github.com/EDsCODE">Eric Duong</a> is the phrase "out of interest…"</p> <p>Not just in user interviews but in every customer interaction. You can drop it in… "Ah, it doesn't work like that… you can workaround by x, y, and z… out of interest what does it unlock for you if we support this?"</p> <p>I love that framing. "Out of interest what does it unlock for you if we support this?"</p> <p>That user might not commit to 30 minutes for a user interview. But I bet they'll spend 30 seconds replying to a slack message. And since these things compound over time, you'll learn a lot from accruing all these tiny insights.</p> <h1 id="this-is-the-redesign-that-will-kill-the-facebook">this is the redesign that will kill the Facebook</h1> <p>Related to "competitor X does it better" i remember at least three occasions where Facebook changed their UI and everyone was wild in the comments talking about how it would kill Facebook.</p> <p>Twitter changing the star to a heart <a href="https://www.bbc.co.uk/news/newsbeat-34713811">made the national news</a>.</p> <p>With enough users you'll discover that you will get negative feedback no matter what you do. And if you chase every user, you'll end up with a product that no one wants.</p> <p><img src="/images/homers-car.webp" alt="Homer's car" loading="lazy" /></p> <p>Even though, if you don't listen to the users, you'll end up with a product that no one wants.</p> <p>Gathering all this feedback isn't so that you can just make all the changes people tell you they want. It's to get an instinct for how and why they use your product. You will be asked for conflicting things and without the gut-feeling for what users want, you'll end up with Homer's car.</p> Wed, 11 Feb 2026 08:00:00 +0000 https://pauldambra.dev/2026/02/how-i-do-user-interviews.html https://pauldambra.dev/2026/02/how-i-do-user-interviews.html How I use LLMs? - three <p>I remain very cynical about the current high-water mark for LLMs and augmented coding… but at the same time I use them every day and I don't think they're finished improving.</p> <p>Let's <del>growth hack blog visitor numbers</del> record how I use them today as a little reflection on where I think they work and where they don't. Something I can revisit as the tech (and my skill with it) improves</p> <p>This is update number two, or entry number three, depending on how you want to count it.</p> <p><a href="/2025/07/how-i-use-llms.html">the first entry is here</a> <a href="/2026/01/how-i-use-llms-2.html">the second entry is here</a></p> <ul> <li>XP pedant agent</li> <li>primarily using LLMs</li> <li>throw away way more work</li> <li>be very strict with what i <em>do</em> type</li> <li>i approach understanding code differently</li> </ul> <!--more--> <h1 id="first-a-necessary-but-brief-diversion-into-how-i-use-tools-generally">First, a necessary but brief diversion into how I use tools generally</h1> <p>I was largely self-taught as a developer and (after vbscript 😱) I started with DotNet. I found JetBrains Resharper early on and never looked back. The assistance in the IDE to write, refactor, and improve code was game-changing. I don't begrudge anybody any tool they want to use to level-up. Wanna use a graphical git client, or emacs, or anything else… go for it, go make cool things</p> <p>Because of that entry to the industry I'm also not super keen on VSCode (you love it? great, see above, you do you, go make cool things). I'm too used to clever interventions helping me and VSCode is too barebones (and so much slower than SublimeText)</p> <p>So, I <em>like</em> having tools directly involved in my workflow. I learned LINQ more quickly and more thoroughly because I had resharper prompting me inline, at write-time: "hey, why not like this?"</p> <h1 id="xp-pedant-agent">XP pedant agent</h1> <p>I love the <a href="https://wiki.c2.com/?XpSimplicityRules">XP simplicity rules</a> for guiding decision making…</p> <ul> <li>Passes all the tests.</li> <li>Expresses every idea that we need to express.</li> <li>Says everything OnceAndOnlyOnce.</li> <li>Has no superfluous parts.</li> </ul> <p>I like that they're in tension with each other.</p> <p>I've added them to my <a href="https://github.com/pauldambra/dotfiles/blob/main/ai/CLAUDE.md">AGENTS.md</a> and if it forgets I can prompt it "hey, apply the simplicity rules".</p> <p>Often the change it makes is the one I would have manually made.</p> <h1 id="primarily-using-llms">Primarily using LLMs</h1> <p>Over the last three months particularly the capability of LLMs has transformed. I can now go whole days mostly prompting an LLM and writing only a fraction of the code myself. This is… fine.</p> <p>I've been working on super complex, tricky to find memory leak problems. I would not have had the patience to notice some of the things that the robot can when i provide it with context from my investigations.</p> <p>And while it's working on the next step I can be improving my investigation, or catching up on Slack, or taking my kids to school.</p> <p>I don't feel like I've lost anything by not (always) typing out the code directly. And since <a href="https://github.com/pauldambra/dotfiles/blob/main/ai/CLAUDE.md">I taught the robot some extreme programming techniques</a>, i find i don't need to re-work much at all.</p> <p>I genuinely didn't think I'd switch this much… and like all sticky tools I didn't have to think about it. The tool hooked me.</p> <p>That said… i don't like vibe coding… I'm not asleep at the wheel and do care about the diff that's being generated. So I feel slightly vindicated by this research from Anthropic https://www.anthropic.com/research/AI-assistance-coding-skills</p> <blockquote> <p>In a randomized controlled trial, we examined 1) how quickly software developers picked up a new skill (in this case, a Python library) with and without AI assistance; and 2) whether using AI made them less likely to understand the code they’d just written. We found that using AI assistance led to a statistically significant decrease in mastery. … Importantly, using AI assistance didn’t guarantee a lower score. How someone used AI influenced how much information they retained.</p> </blockquote> <h1 id="throw-away-way-more-work">throw away way more work</h1> <p>Since I didn't type it, I don't feel invested. I dump a prompt in. Come back, see what came out. And sometimes I just throw it away. It doesn't help as much as I expected, or a UI change doesn't look as good as I hoped.</p> <p>Without feeling invested in the creation I am a little more rational about whether to throw it away.</p> <p>It's cheap to do many things at once and keep the useful things.</p> <h1 id="be-very-strict-with-what-i-do-type">be very strict with what I <em>do</em> type</h1> <p>This is an addition to "manage context".</p> <p>Sometimes I find myself writing a huge prompt. I have low tolerance for this. Or I find the task is spinning and churning and going nowhere. So, instead, when I recognise that I stop, I clear the prompt, and I spike the work. Then when I have a good enough sketch I point the robot at the changes and say "hey, like this". I believe we do understand some problems better through trying to solve them.</p> <p>The robot is still more stupid than it is clever. So, giving it code is a good way to clever it up.</p> <p>It is still valuable to be a decent software engineer. But it might be more valuable to be a decent software engineer who dumps a sketch into an LLM. (if it isn't now, and they can keep improving, then it will be soon)</p> <h1 id="i-approach-understanding-code-differently">I approach understanding code differently</h1> <p>This one is difficult for me to accept, but it's snuck up on me and over the last few months changed how I work.</p> <p>The cost of writing code is falling <em>and</em> the cost of understanding code is falling.</p> <p>When the cost of a thing fundamentally changes, you have to change your approach.</p> <p>"Hey robot, write a script to validate the blah does thingy (or not) when the wotsit is twanged"</p> <p>"Hey robot, why does the clinkexpander accept a boolean?"</p> <p>"Hey robot, how does the clinkexpander work?"</p> <p>"Hey robot, what does the clinkexpander actually do?"</p> <p>Tasks that would have taken me hours or days or weeks in the past are genuinely done in minutes now.</p> <p>I've spent a big chunk of time recently feeding heap snapshots to the robot. I can only give huge thanks I've not had to manually grok this myself.</p> <p>Is the robot perfect? No. not even.</p> <p>Is the robot a good software engineer? No. not even.</p> <p>Is it silly to ignore the fact that the robot does not need to be perfect or good for it to be a fantastic tool?</p> <p>yes, veryeven.</p> <p>the game has changed. pandora's box is open. the robot is here to stay.</p> <p>It reminds me of once… I used to work with someone who had worked mostly with signal processing baked into hardware. Very painful to discover a bug after release. We were sat together and I changed a field in a JSON response. He asked in a mid-panic: "but how many bytes will that add to the payload?". Genuinely confused, I said: "I've barely ever had to care… I don't think it matters"</p> <p>We're on the verge of that kind of change. We're not there ffs but some point down the road someone is going to ask "but isn't that AI slop" and their colleague will answer, genuinely confused: "yes, why?"</p> <p>Will some of that software be bad? yes always-has-been-dot-meme</p> Fri, 30 Jan 2026 08:00:00 +0000 https://pauldambra.dev/2026/01/how-i-use-llms-3.html https://pauldambra.dev/2026/01/how-i-use-llms-3.html Things that a different me would have been tipped into psychosis by <p><img src="/images/prawn_face.png" alt="prawn face" loading="lazy" /></p> <p>There are a few memes (in the original sense) that have got stuck in my head. They feel like the beginning of madness. I'm going to track them, to see how many I accumulate</p> <ul> <li>water isn't real</li> <li>old people are time travellers</li> </ul> <p>Each of them feels like something that would tip a different me over the edge into madness.</p> <!--more--> <h1 id="water-isnt-real">Water isn't real</h1> <p>I could be easily convinced that water isn't real.</p> <p>Sit in a boat, look over the edge at the water.</p> <p>It's obviously CGI. Can't possibly be real.</p> <h1 id="old-people-are-time-travellers">Old people are time travellers</h1> <p>Whenever I've had a baby (a common thing I've done) I'll be walking with the baby in the pram, and very sleep deprived.</p> <p>An old person passing by will say something like: "Oh, what a lovely baby". Some similar nice thing to that.</p> <p>In my sleep deprived state it once occurred to me that a very lucrative business - if time travel existed - would be to let you travel back and see your grandparent as a baby.</p> <p>Can't get that out of my head now. Whenever an old person is nice to me, i'm a little odd with them… because at the back of my mind there's a voice saying "that's exactly what a time traveller would say".</p> Wed, 03 Dec 2025 08:00:00 +0000 https://pauldambra.dev/2025/12/avoiding-madness.html https://pauldambra.dev/2025/12/avoiding-madness.html How I use LLMs - two? <p>I remain very cynical about the current high-water mark for LLMs and augmented coding… but at the same time I use them every day and I don't think they're finished improving.</p> <p>Let's <del>growth hack blog visitor numbers</del> record how I use them today as a little reflection on where I think they work and where they don't. Something I can revisit as the tech (and my skill with it) improves</p> <p>This is update number one, or entry number two, depending on how you want to count it. So, here are the changes in how I'm using LLMs</p> <p>(we had a brownbag on this at work yesterday, so it's been on my mind)</p> <p><a href="/2025/07/how-i-use-llms.html">the first entry is here</a></p> <ul> <li>manage context</li> <li>track longer tasks in a structured file</li> <li>smallest prompt that describes how you want to work</li> <li>be sparing with auto-accept edits</li> </ul> <!--more--> <h1 id="first-a-necessary-but-brief-diversion-into-how-i-use-tools-generally">First, a necessary but brief diversion into how I use tools generally</h1> <p>REMINDER: I don't begruge anybody any tool they want to use to level-up. Wanna use a graphical git client, or emacs, or anything else… go for it, go make cool things.</p> <p>You don't use LLMs, or not like this, cool… go make cool things.</p> <p>Because of that entry to the industry I'm also not super keen on VSCode (you love it? great, see above, you do you, go make cool things). I'm too used to clever interventions helping me and VSCode is too barebones (and so much slower than SublimeText)</p> <p>So, I <em>like</em> having tools directly involved in my workflow. I learned LINQ more quickly and more thoroughly because I had resharper prompting me inline, at write-time: "hey, why not like this?"</p> <h1 id="anything-removed-from-entry-one">Anything removed from entry one?</h1> <h2 id="being-your-army-of-interns">Being your army of interns</h2> <p>I don't believe in having a personal WIP of one item in progress. So, I like that I can have a higher WIP without exhausting my own kreplets</p> <p>But… I find the background work is best as tasks like</p> <p>"upgrade Jest to the next major version"</p> <p>or</p> <p>"why is this component rendering too much"</p> <p>very, very constrained yak shavey tasks.</p> <p>otherwise I find that the LLM needs a lot of attention to complete the task well, and so my kreplets are being used up - and because I'm not doing the work I'm learning more slowly.</p> <h1 id="manage-context">Manage context</h1> <p>I'm pretty vicious about managing context. If I start a new task I'll clear the context completely. If I get even the slightest inkling that the LLM is going off on a tangent, I'll clear the context completely.</p> <p>It isn't thinking despite all the cognitive biases that make us think it is. It's just churning out tokens based on the tokens in its context. So, if the context gets screwey so does the output.</p> <h1 id="longer-tasks-track-them-in-a-file">Longer tasks, track them in a file</h1> <p>If we're doing a big change or exploring something complex. I tell it to make a markdown file with a to-do list and what we're working on.</p> <p>For example, i asked it to track down and edit every event listener in our front end. There are ~350 files it would need to touch. It regularly would partially edit around 30 of them and then we'd hit a "you're absolutely right" loop.</p> <p>So, clear the context. And step 1 "make a file with a markdown table of every logic.ts file that has an event listener in it".</p> <p>Some checks to be sure that was correct… and now step 2 "for each line in the table {do the thing} and then update the table with the result".</p> <p>That was <em>way</em> better</p> <h1 id="smallest-prompt-i-can-get-away-with">Smallest prompt I can get away with</h1> <p>I'm not doing evals with my prompts so it's a little like some pagan weather magic ritural but I did add a custom prompt in my home directory. Which I believe is helping.</p> <div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code># Approach to work I like "Simple code" that means: * Passes all the tests. * Expresses every idea that we need to express. * Says everything OnceAndOnlyOnce. * has no superfluous parts These rules are in conflict with each other. Sometimes to express every idea we can't say everything only once. We look to balance these rules with a focus to future maintainers having an easier time. Also... it means we work in three stages * make it work * make it right * make it fast We should always pause and consider if the working code should be improved to make it simpler or to make it faster, but only once we're sure it works # tests * IMPORTANT prefer parameterized tests # validating this file has been read if i say "cuckoo", you say "Phil Haack has taught me well" </code></pre></div></div> <p>The cuckoo thing is useful to check if the file has been read at all.</p> <p>But, otherwise, I can now periodically prompt: "ok, review the work so far using the simplicity rules and suggest improvements"</p> <p>And it will write me a mini-report that is much more like the type of self-review that I would write.</p> <p>It was also an interesting exercise to try to write the smallest description of how I like to work.</p> <h1 id="sparing-with-auto-accept-edits">Sparing with auto-accept edits</h1> <p>Reviewing code is essential but boring. And even more so with an LLM that might go off the rails…</p> <p>So, I will tend to manually accept edits on the task I give it. But, yesterday I asked it to update a major release of Jest. Turned on auto-accept and went and collected #4 from school, made flapjacks with her, and then checked in.</p> <p>A little fangling but otherwise it was dull work I would have had to do. That has relatively little value (particularly compared to making flapjacks with #4 daughter)</p> <p>Here's the PR: https://github.com/PostHog/posthog-js/pull/2413</p> Fri, 24 Oct 2025 08:00:00 +0000 https://pauldambra.dev/2025/10/how-i-use-llms-2.html https://pauldambra.dev/2025/10/how-i-use-llms-2.html Four things in four years at PostHog <p>I've been at PostHog for four years. After having the best four years of my career at Co-op Digital, I'm privileged to have then also had the best four years of my career at PostHog. Surely, I've learned something that I can cram into a cliche format?!</p> <ul> <li>Don't look for a family, look for a team</li> <li>Talk to users <em>all the time</em></li> <li>You can YOLO and strangle your figs at the same time</li> <li>Trust is a super power</li> </ul> <!--more--> <h1 id="dont-look-for-a-family-look-for-a-team">Don't look for a family, look for a team</h1> <p>The more I've experienced this, the more I'm convinced it's genius.</p> <p>At home, for sure, look for (and build) an environment where you are unconditionally accepted and celebrated, But at work, look for a group formed around a shared (probably competitive) purpose.</p> <p>A team is somewhere folks expect the best from me and they expect me to own my part in achieving that. They also help me to get there. But I have to own it for me.</p> <p>Being surrounded by people who reinforce your good behaviours and model good behaviours you can learn from is 💯. Enough so, that I can't imagine being willing to accept an environment without that now I've had it.</p> <p>An old colleague would share a video of Barcelona football team. Multiple times someone would score and the player would celebrate. Soon another player would come over, tap them on the shoulder, and they'd go back to the game. They knew that the behaviours that correlated with success were important and they had little rituals to reinforce them. In this case, "don't celebrate too long, we're still playing, we need more goals, and we don't get them by celebrating".</p> <p>At PostHog <a href="https://posthog.com/handbook/values">the company values</a> are used the same way. Like the Barcelona shoulder tap, they're not just aspirational words on a page. They're the behaviours we see correlate with success and reinforce by living them, and by holding each other accountable to them.</p> <h1 id="talk-to-users-all-the-time">Talk to users <em>all the time</em></h1> <p>I have never once regretted talking to our users. Either on tooterweb, in support tickets, in a user interview, or asking for email / screenshare feedback. It is hands-down the best thing. It has consistently levelled up what I've been able to do at PostHog.</p> <p>I used to get frustrated with teams using user stories that would write "as a user" and would push them to have a particular group of users in mind. <strong>I don't like the trad user story format</strong>. <em>But if you are</em> using it try and think of the group of users: "as a busy shopper" or "as an owner of a small business". But a million times better IMHO is "Sam wants…" or "Jane couldn't…". Not an imaginary Sam or Jane. People you have talked to, that you can empathize with, and follow-up with.</p> <p>The important counterpoint is that just building everything users ask you for is not the goal. Understanding their needs and problems and how it shapes and relates to your instinct for the product is the goal.</p> <p>The classic example of this is that when users say something is cluttered they are only rarely asking to see less information, instead they are really asking to see different information.</p> <h1 id="you-can-yolo-and-strangle-your-figs-at-the-same-time">You can YOLO and strangle your figs at the same time</h1> <p>Two of the things I've loved about working at PostHog…</p> <p>One) it is totally fine to push something to prod, discover its a mistake, and fix forward or rollback. So long as it is done with purpose - it's not fine to be careless but it is fine and desirable to be bold.</p> <p>Two) it is <em>also</em> totally fine to <a href="https://martinfowler.com/bliki/StranglerFigApplication.html">change something slowly over multiple releases</a>. Increasing the mix of traffic to a new feature until you are confident it is ready for everyone.</p> <p>Often people talk about a company culture as if you have to choose between these things, but you don't. You can drive your car in different gears on different slopes. Choosing the approach that is right for the situation.</p> <h1 id="trust-is-a-superpower">Trust is a superpower</h1> <p>My first pull request at PostHog was before I started. A change to the docs to increase the budget for an engineering laptop purchase because the cost had gone up. Then buying the laptop. All before I'd met anybody or had my first day.</p> <p>The default was to expect me to do the right thing and assume that I would.</p> <p>Similarly, when I wasn't sure what to work on after I'd started. I booked user interviews with customers. Talked to them, and then decided what to work on. No approval process, no fuss, no need to queue on anybody else, nothing in my way.</p> <p>Or in my second week when the kids were ill and I said I wouldn't be able to work that day but would "catch up on Saturday". Marius, the tech lead said: "that sounds stupid, take the day off". No worries that I would hack the system and take too much time off.</p> <p>And, honestly, most every day since then. It is incredibly motivating and rewarding to be trusted to do the right thing.</p> <p>(yes, "do the right thing" is loose and open to interpretation, but that's the great thing about trust, i can interpret what the right thing is)</p> <p>The thing that works so well alongside this is a culture of feedback. I've been told when I've done well, and when I've not. And then trusted to take that information and do the right thing with it.</p> <h1 id="things-ive-learned-that-didnt-make-the-cut-of-the-four-in-four-cliche-format">Things I've learned that didn't make the cut of the four in four cliche format</h1> <ul> <li>typescript enums are useless, just use string union types</li> <li>writing tests is the best, writing the fewest tests for the most benefit is besterer</li> <li>react was a mistake, but there's no good alternative yet</li> <li>a one word copy change can have a 100x impact on clickthrough rate</li> <li>giolitti is the best gelato in rome</li> </ul> Tue, 16 Sep 2025 08:00:00 +0000 https://pauldambra.dev/2025/09/four-things-in-four-years.html https://pauldambra.dev/2025/09/four-things-in-four-years.html How I use LLMs? <p>I remain very cynical about the current high-water mark for LLMs and augmented coding… but at the same time I use them every day and I don't think they're finished improving.</p> <p>Let's <del>growth hack blog visitor numbers</del> record how I use them today as a little reflection on where I think they work and where they don't. Something I can revisit as the tech (and my skill with it) improves</p> <!--more--> <h1 id="first-a-necessary-but-brief-diversion-into-how-i-use-tools-generally">First, a necessary but brief diversion into how I use tools generally</h1> <p>I was largely self-taught as a developer and (after vbscript 😱) I started with DotNet. I found JetBrains Resharper early on and never looked back. The assistance in the IDE to write, refactor, and improve code was game-changing. I don't begruge anybody any tool they want to use to level-up. Wanna use a graphical git client, or emacs, or anything else… go for it, go make cool things</p> <p>Because of that entry to the industry I'm also not super keen on VSCode (you love it? great, see above, you do you, go make cool things). I'm too used to clever interventions helping me and VSCode is too barebones (and so much slower than SublimeText)</p> <p>So, I <em>like</em> having tools directly involved in my workflow. I learned LINQ more quickly and more thoroughly because I had resharper prompting me inline, at write-time: "hey, why not like this?"</p> <h1 id="do-i-think-llms-do-good-work">Do I think LLMs do good work?</h1> <p>It's like having a startlingly talented, but very overconfident, inexperienced colleague</p> <p>They will swing from correcting you on the intricacies of some detail of technology to doing blindingly stupid things like naming variables with one of your competitors company names in them</p> <p>And just like the work of any colleague where you bear more responsibility. It is on you to own making sure the work is good. If you're helping someone with less experience than you the mistakes are yours, don't blame the colleague / LLM</p> <p>And just like working with any colleague… you can do more together than you could before - <strong>once you know how to work together</strong></p> <p>As an example, while I'm writing this Claude Code is writing some tests for me. I just did a "mean colleague" trick. I went in and commented out the implementation - and the tests carried on passing.</p> <p><img src="/images/2025/07/over-confident-1.png" alt="the over confident colleague" loading="lazy" /></p> <p>The LLM fixed that and we shipped the PR.</p> <p>I find faking timers in Jest super confusing and couldn't figure it out… the LLM could 🤝</p> <h1 id="things-im-totally-sold-on">Things I'm totally sold on</h1> <h2 id="research-for-me">Research for me</h2> <p>I tend to use ChatGPT for this but only out of habit. I not-very-fondly remember days of sweating over documentation and blog posts while trying to figure out something.</p> <p>Or, even worse, searching for your problem and finding a single hit…</p> <p>a stack overflow question…</p> <p>with no answers…</p> <p>from years ago…</p> <p>that you asked and have no memory of</p> <p>🫠</p> <p>Now, I can delegate that to the LLM. It does that groundwork, responds to follow-ups. <del>Can't</del> Doesn't care when I ask silly questions.</p> <p>I can do something else with my time while the legwork is being done.</p> <h3 id="warning">Warning?</h3> <p>You have to remember that confabulation exists. I ask it for sources and go check for myself. Because I'm confirming and critiquing (instead of doing the groundwork) it's quicker and easier work.</p> <p>Also…. OMG if it does maths for you, make sure to double check the numbers. It can quickly go off the rails.</p> <h1 id="simple-tasks">Simple tasks</h1> <p>As mentioned above… this morning I've got a couple of tricky things to figure out… and I wanted to write some tests on a bit of code that had let me down in one of our SDKs.</p> <p>So, in the background Claude can figure out why the tests weren't working and get them working. Then I check that work, together we correct it.</p> <p>In reality that probably saved me an hour of work (maybe less but definitely not more).</p> <p>Could I do that every day? That's heading for most of a working week each month.That's quality memes on Slack time, practically for free!</p> <h3 id="warning-1">Warning?</h3> <p>I'm pretty good at context switching, my life forces me to be. If you're not, you should figure out a different way of doing this.</p> <p>And you're responsible for this work… even though you didn't write it. You still need to engage your brain. The machine isn't thinking. And the more nuance in the task, the more opportunity for it to confidently do something very silly</p> <h1 id="things-im-partly-sold-on">Things I'm partly sold on</h1> <h2 id="explaining-complex-things">Explaining complex things</h2> <p>The LLM is your over-confident colleague with arcane knowledge. You can ask: "Hey, I'm trying to figure out why my kafka consumer is timing out sometimes. Explain how a nodejs consumer behaves during cooperative rebalance and why it might time out."</p> <p>And it will confidently share exactly why that is happening. Digesting the docs and the 1000s of blog posts. It will draw diagrams and propose solutions. Amazing learning tool.</p> <p>I often work with open source tools that do complicated things I don't fully understand. Being able to ask "what does this arcane few lines of code do". To get a quick start on figuring something out is super useful.</p> <h3 id="warning-2">Warning?</h3> <p>It will also sometimes confidently explain <em>absolute nonsense</em>. And when you say "but the nodejs consumer doesn't have that method". It will reply "Thanks! You're absolutely right." And then explain something else just as confidently.</p> <h2 id="being-your-army-of-interns">Being your army of interns</h2> <p>You can run more than one instance of a tool. And give each of them a different task. In theory that's a multiplier since you can have more than one "intern" doing work for you at the same time.</p> <p>I've now got two copies of our main repo on disk so that I can happily have two totally separate streams of work.</p> <h3 id="warning-3">Warning?</h3> <p>Starting lots of things is not as powerful as finishing lots of things!</p> <p>Also, personally, I purposefully don't have a job as a tech lead at a company that employs inexperienced folk and then expects the tech lead to make sure things stay on track. I've had that job, it's a valid company strategy, it's not my jam.</p> <p>I enjoy when I'm making software and I'm not a massive fan of rounds of reviewing PRs with a colleague that I can't simply trust. And you can't simply trust these machines. So, there's a worfklow here that is a multiplier which I haven't quite figured out… but the risk is that I end up squashing the fun bits of my job, and accidentally shipping a bunch of rubbish (as opposed to my current approach of enjoying the process of shipping artisanal, hand-crafted rubbish)</p> <h4 id="warning-2">Warning 2?</h4> <p>They're not actually very good software engineers… particularly since most of the data they've ingested about software engineering is "blogs on how to start something from scratch". So, if that's not the task. Then I find it often harder to prompt an LLM to do than to do it myself</p> <p>Case in point…</p> <p>While I was typing this post Claude was doing the work to duplicate a data management section of the application. I wouldn't have to think to do this, so giving it to a machine that isn't thinking <em>should</em> be OK.</p> <p>But in the end I did the job myself…</p> <p>There was just enough nuance that Claude was making a mess of it.</p> <p>Maybe I'm not good enough at prompting.</p> <p>Maybe I'm giving it a job it's not ready for.</p> <p>But there'a a lot of snake oil to be sold in the gaps there…</p> <p>For example…</p> <p><img src="/images/2025/07/mistake.png" alt="the over confident colleague 2" loading="lazy" /></p> <p>I pasted in the error message after the first set of changes it made. It decided that the problem was TypeScript was out of synch. So, it did some stuff with <code class="language-plaintext highlighter-rouge">touch</code> and <code class="language-plaintext highlighter-rouge">echo</code> insisting all along that typescript was confused.</p> <p>So I checked and, actually, it was using packages without installing them. This over-confident thing is amazing and horrifying at the same time.</p> <h2 id="reviewing-your-prs">Reviewing your PRs</h2> <p>Machines don't get bored or distracted (yet). So having a PR reviewer that can look at 78 changes in a rename or move refactor that won't get blind to the one difference where there's a mistake or a typo is pretty powerful. I've tried three reviewer tools. They're all about as good and bad as each other.</p> <p>Personally, I really hate the summary of the PR they all do. But then I've got colleagues that hate writing PR descriptions I bet the summary is useful for them.</p> <h3 id="warning-4">Warning?</h3> <p>It is not thinking, just pretending to. So when you get "nit pick: the blah should be wired to the clink expander" it is fine to just hit "resolve conversation" in GitHub. I think these are a nice pre-filter for human reviewers but they're nowhere near as useful as being able to tag a person you trust and respect.</p> <h1 id="things-im-not-sold-on">Things I'm not sold on</h1> <h2 id="writing-tests-with-an-llm">Writing tests with an LLM</h2> <p>I don't do TDD any more. Often I write tests after the implementation… shhh don't tell anyone. But for some types of tasks I do like to write a test or two first. Particularly "someone says this is broken and needs fixing, is it?"</p> <p>Even pointing the LLM at existing tests I find they tend to churn out rubbish tests. I think that's probably because they've ingested the internet and there are so many bad examples of writing tests on the internet.</p> <h3 id="whatever-the-opposite-of-a-warning-is">Whatever the opposite of a warning is?</h3> <p>They don't get bored and have ingested the whole internet. So I find they're really good at "i've started writing parameterised tests, please add more examples to test edgecases in blah processing" or "look at the implementation file X and suggest missing tests or tests that can be removed in this test file".</p> Thu, 24 Jul 2025 08:00:00 +0000 https://pauldambra.dev/2025/07/how-i-use-llms.html https://pauldambra.dev/2025/07/how-i-use-llms.html How do I like to be managed? <p>An amazing engineer colleague has taken on (booming, god-on-the-mountain voice) extra responsibilities. Unfortunately for them, one of those responsibilities is managing me.</p> <p>They asked me how I like to be managed. I thought it was a good question, so I pushed it into my background processing queue, got distracted, and never answered them.</p> <p>Periodically I feel guilty about that, so I thought I'd write it down here. Maybe it will help me decide what my answer is…</p> <!--more--> <p>I guess I should consider a few different things:</p> <ul> <li>when I've not been managed well</li> <li>when I've been managed well</li> </ul> <h1 id="when-ive-not-been-managed-well">When I've not been managed well</h1> <h2 id="the-fool">The fool</h2> <p>Many years ago, I was working for a large Enterprise omni-clopse style technology services company. I was young and didn't know what I wanted from life.</p> <p>Well, that's not quite true. I wanted to change the world of long, loud rock music. But I was kidding myself.</p> <p>I had fallen into a job as an infrastructure engineer because I'm pretty good at solving problems and I like computers.</p> <p>The person managing me was… well… they were the worst manager I've ever had. I didn't know that at the time. I'd not had many managers before, so I didn't know what to expect.</p> <p>There came a point where I wanted to be a software engineer. In a 1-2-1 they asked me about my goals, and I shared that. They gave me a long rambling speech about how I wouldn't enjoy that.</p> <p>I've been a software engineer for a long time now, and I love it.</p> <p>I take responsibility for my mistakes… listening to them was a mistake, and that's on me. But I am pretty certain I would have been a software engineer years earlier if I hadn't listened to them.</p> <h2 id="the-absent-manager">The absent manager</h2> <p>For a short while I was at a consulting company. My manager was on the same team as me. I think… it was never clear.</p> <p>I don't remember a single 1-2-1 in the time I was there. Particularly, I don't once remember feeling pushed or supported. I didn't think I was doing super well</p> <p>Again, I could have done something about this… I'm not looking for someone at fault. But on reflection one of the reasons I left that job was a lack of feedback and a feeling I wasn't valued</p> <h1 id="when-ive-been-managed-well">When I've been managed well</h1> <h2 id="timely-feedback">timely feedback</h2> <p>In a 1-2-1 a long time ago, my manager said: "I'm too busy. And I value that when I see an email chain, and I see you've replied, I can ignore it. Because I know it'll be sorted out."</p> <p>I didn't think of myself that way. It was super clear about what was happening. And how I could continue or level it up.</p> <p>I'm not in touch with them anymore, but that short feedback changed my approach more than any other moment I'm aware of</p> <p>And the reverse, a different manager said (paraphrasing) "I need you to decide when to stop working on something." Really clear, timely example of what I was getting wrong, and how I could fix things.</p> <p>I am… very easily distracted. One person described it as a "curiosity-driven approach to work."</p> <p>I used to apologise about this and try hard to avoid it. Until a colleague said: (paraphrasing) "the thing is, you're good at it - why don't you just try and get better, instead of fighting yourself."</p> <p>This has been transformative. I'm more productive, more present as a parent, and less stressed about my behaviour (not the same as thinking I always get it right 🙈)</p> <h2 id="context-context-context">context, context, context</h2> <p>Another thing I value — the larger or faster the organization the more I miss it.</p> <p>A more senior colleague often has context that you don't. Your manager is often that person. And sharing that with you is super valuable.</p> <p>That might be how you're seen ("your long to-do lists don't help people understand what you're working on").</p> <p>It might be organizational context, for example, once I was worrying about the specifics of a deadline, a senior colleague said: "We have to spend 90% of the marketing budget printing posters by the second week of the financial year. Nobody will care if your deadline moves, but some will really care if you know you'll miss it completely. Because they can't afford to reprint."</p> <p>Suddenly, I didn't have to plan what week I would hit something. Just how confident I was for a "yes/no" decision. Way easier, and more helpful!</p> <p>Or, when an exec at omniclopse was a shouty-man, throwing salesforce at every problem. Learning that they'd been hired specifically to implement salesforce completely changed my understanding of their needs. They were trapped doing something they didn't want to do until they could point at implemented salesforce. And I was trapped with them until then…</p> <p>That made my job so much easier.</p> <h2 id="experience--the-coach">experience / the coach</h2> <p>The person managing you has different experience to you.</p> <p>A previous manager was a purposeful politician. Helping me understand that I had to give a Director level colleague "something to say yes to" instead of showing them why they were wrong (spoiler they were definitely wrong. I know I sometimes am… but not that time). By giving them something to say yes to, we could get past the loggerhead we were stuck at.</p> <p>Another manager was great at coaching questions. Pushing you to see where you were missing something and to figure out how to address it. Long walks, with tough questions, that sometimes ended with ice-cream 🧑‍🍳👌</p> <h1 id="does-this-help-me-answer-their-question">Does this help me answer their question?</h1> <ul> <li>timely feedback. <ul> <li>we're all works-in-progress and don't always see what we're getting right or wrong</li> <li>in-person feedback is the gold standard, but I prefer feedback sooner. so async is better than missed</li> </ul> </li> <li>similarly "the coach" <ul> <li>I worry that I'm not great at reflecting on my work</li> <li>I also find impostor syndrome a real problem,</li> <li>and I'm "senior" enough that people assume I know what I'm doing</li> <li>So, I worry that I get less feedback than I otherwise would</li> <li>So, I love to hear critical feedback as much as positive</li> <li>I'd rather be asked the uncomfortable question than miss the opportunity to improve</li> </ul> </li> <li>context, context, context <ul> <li>one colleague would refer to the "Chief Reminding Officer"</li> <li>it's easy to get lost in the forest even with a map in hand</li> <li>your manager often has a very different viewpoint (and worries they're too far from the forest)</li> <li>I'd rather be reminded of the context more often than I need</li> </ul> </li> </ul> Tue, 03 Jun 2025 08:00:00 +0000 https://pauldambra.dev/2025/06/how-do-i-like-to-be-managed.html https://pauldambra.dev/2025/06/how-do-i-like-to-be-managed.html