Repository navigation
Expand file tree
/
Copy pathfeed.xml
More file actions
1341 lines (894 loc) · 94.7 KB
/
Copy pathfeed.xml
File metadata and controls
1341 lines (894 loc) · 94.7 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>Mindless Rambling Nonsense</title>
<description>My thoughts are mindless and rambling so the best place for them is the internet</description>
<link>https://pauldambra.dev</link>
<atom:link href="https://pauldambra.dev/feed.xml" rel="self" type="application/rss+xml" />
<updated>2026-10-21T08:44:27+00:00</updated>
<item>
<title>Machinists > Tailors</title>
<description><p>Machinists &gt; Tailors</p>
<p>Software engineers are turning into AI Engineers? No, we are turning into software machinists. Replacing handmade software with (increasingly) cheap, plentiful, machine-made software. Unlike tailors who handcraft each item, machinists build tooling and inspect samples and then produce in large numbers.</p>
<p>Mid 2025 tab completion was a toy. I didn't really use it and was no slower than colleagues who did. <a href="https://pauldambra.dev/2026/02/deca-hundy.html">I shipped around 60 PRs a month in 2025</a> and barely used AI. Around September 2025 I confidently told a table of other engineers that there was no chance I would stop writing code. I simply loved it too much.</p>
<p>Then Opus 4.5 happened and by chance I changed laptops. I realised at the end of January 2026 that I had not written a line of code by hand. I hadn't even installed an IDE on the machine I was using. I merged 62 PRs in the PostHog monorepo in Jan 2026, roughly the same as any month in 2025, but all without typing a single line. And I loved it. It made me wonder if I was that wrong in September, then how wrong was I now?</p>
<p>Observing the changes in how I work, and how my colleagues work, I see a number of common changes:</p>
<ul>
<li>we are tech leads for a team of junior engineers now</li>
<li>the code is not for us</li>
<li>paying attention to context (pun intended) is even more important</li>
</ul>
<p>And have some predictions:</p>
<ul>
<li>continuous integration and review will change next</li>
<li>we make tools for our workshop</li>
</ul>
<p>Ok, some folks are still working on systems with critical safety requirements or high performance systems where it is easier to cause an incident and things have changed less for them. But the majority of us now have a different job. It is no longer sufficient to pore over every line of code, following the practices of bespoke tailored software engineers. Now we are software machinists.</p>
<h1 id="observations">Observations</h1>
<h2 id="we-are-all-tech-leads-now-leads-of-a-team-of-robo-juniors">We are all tech leads now. Leads of a team of robo-juniors</h2>
<p>Tech leads set direction and curate team habits so that the group becomes more effective over time. Our robo-engineers are not curious, so with a robo-team it is up to us to set direction. In the past this was necessary because it helps us do better work. Now it is necessary because the robots won't do it. It's one part where the human is value-add. To quote Kent Beck after he first tried using ChatGPT: "The value of 90% of my skills just dropped to $0. The leverage for the remaining 10% went up 1000x. I need to recalibrate".</p>
<p>The tech lead was always responsible, not for reading and reviewing all the code, but for setting direction. For being the casting vote when there is disagreement. They follow the work of each team member in enough detail that they can share context without getting into the weeds of each piece of work.</p>
<p>Now we do that for our robots. At first it was by choosing when to hit tab, then the prompt, the context, the harness… increasingly at PostHog I see even that work delegated. Several people will ask our <a href="https://posthog.com/docs/libraries/slack">Slack agent</a> to create github issues when they see a thread they want to act on. Those issues are picked up by our self-driving tooling and they will be tagged on the pull request when it is generated.</p>
<p>A lead is responsible for paying attention to overall quality of the systems they own. Importantly, that's not quality per PR. Your team should be able to review each other's PRs without you. Your responsibility is the quality over time. Unintended consequences accrue over time as well-intentioned decisions in each change combine in a way you didn't expect and wouldn't have chosen.</p>
<p>To cover this I have been using <a href="https://posthog.com/docs/self-driving/scouts">Scouts</a> (agents that run on a timer). I have a suite of "complexity hunters". They check for cyclomatic complexity because even with agent-written code, we see exceptions cluster in complex code. And then they open PRs to split this up. Using skills to guide how we like to see code split, not just chasing a complexity score.</p>
<p>The hunters check for share of comments in a diff, we've seen that grow from 2% to over 9% before getting things back under control. And they check for known shapes of bugs we've seen more than once. Like forgetting to use a different serialiser in an API for listing things, or using a Django TestCase that sets up the database only to run tests that don't make any queries.</p>
<p>The complexity hunters have merged 47 PRs in the last 30 days. These PRs are mostly reviewed by other agents. The job of the software machinist is to make it safe not to review the PRs. This one set of scouts are shipping almost as many PRs in a month as I was each month through 2025.</p>
<p>Leading from a place of trust means coming to understand what different models are capable of. To delegate to my robo-team members appropriately. Giving them the right instructions and guard rails so that they can do good work. It means not always reading every line of code because we trust the system built around the work of the robots. Knowing when a task needs closer attention and when it needs none at all. Setting up the practices that team members can follow so that lessons learned are baked into our habits.</p>
<p>I have a review skill that is "trained" on the history of my PR reviews at PostHog over the three years before AI really took off. Another that is trained on the wisdom of the conversations on c2wiki.com. Where the folks that went on to write the agile manifesto and in other ways shape modern software engineering would discuss how they thought about engineering. These and other skills run on a variety of models and their reviews automatically become prompts that ship fixes to my PRs. I only get involved when that all has settled.</p>
<p>In the same way that I don't check the work of prettier when it reorganises my files. I don't check the individual steps of the work of these reviewers. I only look at their final output. The job has always been about delivering the most value for the least effort. How I express that is different now. I can fight it or I can shut up and ship some value. 2025 Paul would never have handed over review to automation. 2026 Paul can't afford not to.</p>
<h2 id="the-code-is-not-for-us">The code is not for us</h2>
<p>The better the robots become, the less that the code is for the humans.</p>
<p>To quote my colleague, Tue Haulund:</p>
<blockquote>
<p>I'm sure when the first FORTRAN compiler was released, for a time, engineers still read the machine code output that it produced to make sure it was up to scratch. Who does that still? Compiler developers and nobody else. It will be like that for generative LLMs producing code also. Imagine someone making the argument that if you don't read, understand and verify all the assembly that GCC outputs then they're not a real engineer or they're somehow not doing their job.</p>
</blockquote>
<p>Sure, compilers are deterministic, so this doesn't map one-to-one onto agent driven work. But it shows that as technology changes our behaviours around it will need to change.</p>
<p>This can be seen not just at the technology level. As soon as a company is large enough you don't read all the code. Another team ships an API. You may write some integration tests but you use the API without reading its code. You install a dependency and you don't read the code, you write some tests to verify it works and you move on.</p>
<p>Now that it is cheaper to generate code I have to treat the work of the agents in the same way. I don't read it. I verify it works. We take the behaviours that protect us and double down. Having strong habits and automation around validation has always been a multiplier for how fast you can safely mutate your system. As we speed up the ability to create and change our software this becomes more important. Reading the code was only ever a part of that validation so that the human could understand the interaction between the desired impact and what needed to be validated.</p>
<h2 id="paying-attention-to-context-pun-intended-is-even-more-important">Paying attention to context (pun intended) is even more important</h2>
<p>An old colleague, Andy Longshaw, used to say "A problem has a solution in a context". Even within one organisation there is more than one context for the work of doing engineering. In test driven development people talk about "driving in gears". The idea that just like you have to drive in the right gear for the terrain and conditions the way you write code and tests changes as the context of the code changes.</p>
<p>Folks who are working on high performance or critical systems will be less likely to allow robots to self-drive their systems with minimal human interaction. I made a mistake once in a change to PostHog's ingestion pipeline that increased CPU usage. The runaway impact led to an hours-long incident call as we fought to stabilise the pipeline enough to recover from the backlog that was caused.</p>
<p>In that type of system accepting a change is more complicated. Deployments are split into stages and the new code taking effect is separated from the deployment of the code so that it can be safely rolled out. Robo-juniors still need much more shepherding to achieve this kind of work.</p>
<p>Even here they can help. For example, in our JS SDK repo we have a list of code areas that were involved in significant bugs. We automatically flag when a change touches one of those areas and have a skill that teaches an agent how to go deeper in a follow-up if the validation flags a change. Encoding organisational knowledge in an active way to help improve safety.</p>
<p>Or we surface checks from CI back to the agent. When a PR might change an API and the desktop app at the same time, we warn the agent that it needs to deploy the work to change the API first or make the change backwards compatible. And that problem doesn't need to bubble out to humans unless the solution isn't clear.</p>
<h1 id="predictions">Predictions</h1>
<h2 id="continuous-integration-and-review-will-change-next">Continuous integration and review will change next</h2>
<p>Theory of constraints suggests that continuous integration and review will change next. This theory tells us that every system has one step that is slower than all the other steps. That slow step sets the speed of the whole system. We call it the constraint (or the "bottleneck"). You can learn more in The Goal from Dr. Eliyahu Goldratt. I’m lazy, so I recommend the graphic novel of the book.</p>
<p>Now that robots can speed up PR creation, PostHog has seen around a 5x increase in PRs against a 1.5x increase in headcount, that creation is likely no longer your system's slowest step. The next steps in the chain are to review, build, test, and then deploy your system. One of those becomes the new bottleneck in your delivery.</p>
<p>We are forced to focus even more on "the work not done". For example to reduce unnecessary CI steps. PostHog ran 46 years of CI time in August 2026 (kudos to depot.dev for absorbing the growth). Allowing this to grow unbounded is unsustainable even just economically. In September we had this down to 36 years of CI time. There’s the value of the work not done, we merged 26% more PRs but CI time fell 22%.</p>
<p>We expect to see software services and tooling flourish here. This new bottleneck will need new solutions to help us deal with this growth in code creation. I’m thinking about how we present changes so that we can care about each agent-driven PR roughly as much as we used to care about each commit in the PRs.</p>
<p>The next discovery for us is what tooling and behaviour has to change to make this safe. Of course, it is possible that it cannot be made safe. And then we also need to recognise that and put back pressure in place to avoid overwhelming the system with fresh PRs when there is already too much work in progress. One consequence of the theory of constraints in a production line is to teach us to control work entering the system, as well as to increase it at the slowest point.</p>
<p>I have never recommended that people try to read every PR. Instead we set up the guard rails that help the members of the team make decisions and then step back and let them work. We have an agent called StampHog that has a set of rules of how to decide if a PR is safe to approve without needing further review. It can approve a PR without other human interaction. About 30% of our PRs are approved by StampHog. For around $910 a month in token costs. Fantastic value for money to speed up other work.</p>
<p>StampHog is open source so you can see how it works. But how can I be sure it’s not a slop cannon? At PostHog we are quick to revert a PR if there is even a hint of a problem. In January 2026 1.5% of our PRs were reverts, in August 2026 just 0.25% of PRs were reverts. I’m confident from how we measure the system and from user feedback that we’re not shipping fast just for the sake of it.</p>
<p>And for the PRs that aren't an easy stamp, we have ReviewHog. This goes deep on reviews and you can apply your own skills to extend the reviews on your PRs. Humans at PostHog tend to take half a day to get around to reviewing a PR. It takes ReviewHog 30 minutes to do a deep and thorough review.</p>
<p>We run evaluations against our AGENTS.md making a change with and without it present to check that it is actually guiding our agents and scoring various models to keep track of how they behave. And have various models recreate human-only pull requests from the before times to score how well they mimic accepted changes from the past.</p>
<h2 id="we-make-tools-for-our-workshop">We make tools for our workshop</h2>
<p>Machinists, of course, do one-off work to make tools for the workshop. They make them cheaply and often throw them away, because they’re just as cheap to make again. And so we should expect to see some systems be completely ephemeral, while others will be critical. When the cost of making code is low, people will make very quick apps to solve their problems. The opportunity for organisations to identify when something is useful and to promote it from “ephemeral” to “critical” will be powerful.</p>
<p>We are already seeing this at PostHog as people generate new apps to manage PR reviews, present diffs in new ways, manage CI and review shepherding across tens of PRs at a time, and even ship wasm to the browser so they can embed doom in our main product. And they are doing this alongside their primary work not instead of it.</p>
<p>My colleague Tom Owers has made <a href="https://www.talyn.dev/">Talyn</a>. He uses it to manage the hundreds of PRs he generates expanding the range of sources our context warehouse can handle. Talyn started as one person’s vibe-coded app and now multiple people are using it and contributing to it. Alongside it, he made totally custom software to manage tracking requested sources and replying to people automatically when they’re shipped. Several others have made applications to visualise and review changes through multiple lenses. Our devex team has made an application to group and prioritise github notifications so you can focus your attention when unblocking others.</p>
<p>Here is a real impact of the switch to machine-made systems over bespoke systems. The ability to very quickly retool and deliver products is enhanced. This is a new expression of agility and craft. Something that wasn't available to as many organisations as before. These applications might continue to be worked on, they might be thrown away and serve as inspiration to the replacement. When the cost of making is low, the cost of discovery is lowered.</p>
<p>Generating SQL queries and UI over your data is available to more people on a timescale that wasn't available before. When I worked at Co-op Digital we had a large team that spent many months making a repeatable web platform on top of a design system in order to industrialise the production of content driven websites. I would expect that to be days or weeks not weeks or months now.</p>
<p>But I would also expect the bottleneck there to still be the design system. At co-op one problem was that with so many teams and departments systems that were built looked, behaved, and felt different. And so <a href="https://www.coop.co.uk/experience-library/">their design system</a> was critical. That work is still hard and still essential.</p>
<p>Since the barrier to entry for SQL queries has fallen, the barrier to generating a bad query or analysis has fallen too. At PostHog we've had to build a "semantic layer" so that we can have one place where the robots can look-up meaning to guide their decisions. Otherwise nuanced questions like "What is the revenue of product X" can have varying answers. We don't want to restrict who can ask which question, we just want tooling that enables good answers.</p>
<p>So, some of the systems we use now will be almost entirely ephemeral. Entirely validated by their behaviour, generated on-demand, cheap to create, and so cheap to throw away. Others will be all the more critical. Being built and validated more carefully under the increased rate of change. As the cost of creating these things falls. The shared layer, things like your design system or security controls, becomes even more important, contributing to your ability to maintain a high pace safely.</p>
<h1 id="the-conclusion">The conclusion</h1>
<p>There isn't one kind of engineering job. This is true at PostHog where we have teams that cover a range of responsibilities: growth, products, ingestion, ClickHouse, billing, and more. And so it is easy to make statements that will work for one group and not at all for others. But that won’t stop me. Most engineers need to stop trying to read the code and start trying to make it safe not to read the code. Even if agents don't improve their capabilities from now, the job of a software engineer has changed. If they keep improving it will be fully transformed.</p>
<p>This might feel uncomfortable but we mustn't complain about "slop" any more than a sailor should complain about the weather. Instead we must act to make our systems better. Taking advantage of the tools available to us. Like a machinist we build tools to do the work and the checks that test it.</p>
</description>
<pubDate>Wed, 21 Oct 2026 08:00:00 +0000</pubDate>
<link>
https://pauldambra.dev/2026/10/machinists-not-tailors.html
</link>
<guid isPermaLink="true">
https://pauldambra.dev/2026/10/machinists-not-tailors.html
</guid>
</item>
<item>
<title>Don't stop the slop</title>
<description><p>I've long avoiding saying "legacy". I think it's lazy to use it. It's always seemed to be a term to group together "a bunch of stuff i don't like".</p>
<p>Same with technical debt. Which <a href="https://pauldambra.dev/2021/07/tech-debts.html">I wrote about at length</a> a few years ago.</p>
<p>They're words that mean "i don't like that" or "i wouldn't do that"</p>
<p>Worse. If you say them to ten people at least eleven different definitions were heard. It's just not good communication.</p>
<h2 id="and-now-everyone-says-slop">And now everyone says "slop"</h2>
<!--more-->
<p>I've noticed this creeping in. In bug reports "why even ship this slop" for features that were made in the beforetimes (pre-October 2025 and the great AI awakening). It just means "i don't like that" and it doesn't have a defined definition. It's just not good communication</p>
<p>Then, while writing this, I googled for the definition… if I'm gonna say it doesn't have a definition (and this is the load bearing part 🤢) I should check if that's true</p>
<p>And, well, it does have a definition… and it's fucking glorious.</p>
<h2 id="ok-ill-bite-whats-the-definition">Ok, i'll bite… what's the definition?</h2>
<p>using this <a href="https://en.wikipedia.org/w/index.php?title=Slop_(clothing)&amp;oldid=1373259449">version of the Wikipedia page</a></p>
<p>If you go back far enough it's just "various types of loose clothing". 19th century British naval ships even had a "slop chest"</p>
<p>But in the 19th century as the industrial revolution bit and we could make things with machines in a way we couldn't really before "slop" had a negative connotation. There was conflict between bespoke tailors and slop traders. Slop was a term applied to all clothing that was not skilfully tailor-made for the customer.</p>
<h2 id="and-we-all-still-wear-bespoke-tailored-clothes-thank-the-maker-for-that">And we all still wear bespoke tailored clothes, thank the maker for that</h2>
<p>Machine-made clothes won out, right? In the UK at least it is rare to wear bespoke tailor-made clothes. But nobody calls it slop. Industrial clothes production was cheaper and closed the quality gap enough that most people don't care.</p>
<p><img src="/images/2026/09/slop-confuse.png" alt="the title of the Wikipedia page" loading="lazy" /></p>
<h2 id="well-i-am-wilfully-going-to-confuse-it-with-ai-slop">Well, I am wilfully going to confuse it with AI slop.</h2>
<p>During the short-lived tab completion phrase AI made software badly. Claude's Opus, fable and Jippity's astra, and sol circle around making software passably. Sometimes they are amazing and sometimes not. You can meaningfully write software without ever actually writing the software.</p>
<p>Arguably, right now your bespoke tailor-made software beats the cheap ready-made stuff. Engineers still worry about the code being slop.</p>
<p>But…</p>
<p>It keeps getting better. And the slop only has to become cheap enough or good enough and that will flip. We won't call it slop any more, it'll just be code.</p>
<p>You and I as software engineers just need to decide when we switch and become software machinists or software therapists.</p>
<p>Personally, I don't really care if it is desirable since I think it is inevitable.</p>
<p>And to paraphrase my wonderful colleague Jon McCallum: I'd rather rise to the occasion than complain about it.</p>
</description>
<pubDate>Tue, 22 Sep 2026 08:00:00 +0000</pubDate>
<link>
https://pauldambra.dev/2026/09/i-will-happilly-slop.html
</link>
<guid isPermaLink="true">
https://pauldambra.dev/2026/09/i-will-happilly-slop.html
</guid>
</item>
<item>
<title>How I use LLMs? - six</title>
<description><p>Let's <del>growth hack blog visitor numbers</del> and keep on recording how I use agents/LLMs 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 five, or entry number six, depending on how you want to count it.</p>
<ul>
<li><a href="/2025/07/how-i-use-llms.html">part 1 - structured tone of fascination + scepticism</a></li>
<li><a href="/2025/10/how-i-use-llms-2.html">part 2 - learning how to manage and control them</a></li>
<li><a href="/2026/01/how-i-use-llms-3.html">part 3 - reluctant acceptance but also thankfulness (?) of what they do for you when you let go of control</a></li>
<li><a href="/2026/03/how-i-use-llms-4.html">part 4 - realising even though it's no longer "braincode" + no longer for humans, it still comes from human brains</a></li>
<li><a href="/2026/06/how-i-use-llms-5.html">part 5 - oh no, am i AI pilled</a></li>
</ul>
<p>someone at work named the episodes for me, i love it</p>
<p>so now… part 6 - i think maybe everything changed</p>
<h2 id="in-todays-edition-of-ai-hot-takes">in today's edition of AI hot takes</h2>
<ul>
<li>saying "slop" considered harmful</li>
<li>ship value, not craft</li>
<li>don't read code</li>
<li>manage loops and context - fuck prompts</li>
<li>if you make me copy &amp; paste a prompt you've lost me</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="saying-slop-considered-harmful">saying "slop" considered harmful</h1>
<p>I've noticed a habit for folk reporting a bug with a system to say things like: "ugh, the clink expander doesn't work. why even ship this slop?!"</p>
<p>my friends, if you think there were no bugs prior to December 2025 then you were not paying attention.</p>
<p>through most of 2025 if you were just shipping AI generated code without thorough checking then you were going to be in for a bad time… but the world changed in Dec 2025 and several times again through 2026.</p>
<p>the code written by LLMs is now at least as good as that written by the worst junior developers i've worked with over ~20 years. and sometimes much better.</p>
<p>those junior developers all managed to ship value despite being inexperienced.</p>
<p>and the goal is shipping value</p>
<h1 id="ship-value-not-craft">ship value, not craft</h1>
<p>i have long considered myself a software crafts person. attended user group meetups; run brownbags at work; practised deliberately and consistently; learned about XP, agile, tdd, and more.</p>
<p>why… because i believe that software gets harder to change and extend over time otherwise</p>
<p>and that's important because i have always been focused on shipping value to people</p>
<p>a problem has a solution in a context</p>
<p>as agents have improved the context has changed gigantically</p>
<p>the problem of needing to ship value remains but the solution of software craft doesn't fit any more</p>
<p>software needs to be easy to change and extend <strong>by agents</strong> way more than by humans</p>
<p>we would slow down when software files became complex because they broke our meat brains… but our meat doesn't need to parse it any more, our agents will</p>
<p>if software is for agents not humans, then one change (whether you like or not) is…</p>
<h1 id="dont-read-code">don't read code</h1>
<p>to quote a (frankly fantastic) colleague:</p>
<blockquote>
<p>I'm sure when the first FORTRAN compiler was released, for a time, engineers still read the machine code output that it produced to make sure it was up to scratch.</p>
</blockquote>
<blockquote>
<p>Who does that still? Compiler developers and nobody else.</p>
</blockquote>
<blockquote>
<p>It will be like that for generative LLMs producing code also.</p>
</blockquote>
<blockquote>
<p>Imagine someone making the argument that if you don't read, understand and verify all the assembly that GCC outputs then they're not a real engineer or they're somehow not doing their job.</p>
</blockquote>
<p>I think about this like I am working with a team of developers. Not <em>in</em> the team. <strong>with</strong> the team.</p>
<p>If I hire them to make an API for me. I'll write tests directly against their API maybe. Against my use of it for sure. I'm very, very unlikely to look at their code. When I'm using agents. I'm working with them, not in them. So, the code they write is simply unimportant if it works.</p>
<p>I have always asked three questions:</p>
<ul>
<li>how do you know the software doesn't do it today</li>
<li>how will you know the software does do it in this change</li>
<li>how will you know the software still does it the day after the deployment</li>
</ul>
<p>the answer has always been "writing tests, gathering metrics, and talking to users"</p>
<p>this becomes so much more important in this new world</p>
<p>deciding what to build and whether it was good idea once you've finished is where you should spend your time. reading code used to support that, but not any more</p>
<h1 id="if-you-make-me-copy--paste-a-prompt-youve-lost-me">if you make me copy &amp; paste a prompt you've lost me</h1>
<p>i noticed i now find tools that expect me to copy their output to the next LLM annoying</p>
<p>the future is a world of agents interacting. not people passing text between agents.</p>
<p>different people will want to grab output from the loop of genies at different points. your org might require you use a particular system or an air-gapped network or whatevs and you'll need to break the loop and move data yourself in some way.</p>
<p>but lots of systems will be a set of agents triggered by timers or external signals passing data and prompts between themselves… and it's gonna be super cool.</p>
</description>
<pubDate>Sat, 25 Jul 2026 08:00:00 +0000</pubDate>
<link>
https://pauldambra.dev/2026/07/how-i-use-llms-6.html
</link>
<guid isPermaLink="true">
https://pauldambra.dev/2026/07/how-i-use-llms-6.html
</guid>
</item>
<item>
<title>How I use LLMs? - five</title>
<description><p>I have lost roughly 60% of my cynicism about the current high-water mark for LLMs and augmented coding… I am certain this last 9 months has been a significant generational change in how we can approach work.</p>
<p>Oh no, I'm AI pilled</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 four, or entry number five, depending on how you want to count it.</p>
<ul>
<li><a href="/2025/07/how-i-use-llms.html">part 1 - structured tone of fascination + scepticism</a></li>
<li><a href="/2025/10/how-i-use-llms-2.html">part 2 - learning how to manage and control them</a></li>
<li><a href="/2026/01/how-i-use-llms-3.html">part 3 - reluctant acceptance but also thankfulness (?) of what they do for you when you let go of control</a></li>
<li><a href="/2026/03/how-i-use-llms-4.html">part 4 - realising even though it's no longer "braincode" + no longer for humans, it still comes from human brains</a></li>
</ul>
<p>someone at work named the episodes for me, i love it</p>
<p>so now… part 5 - yee haw, paul is AI pilled</p>
<h2 id="in-todays-edition-of-ai-hot-takes">in today's edition of AI hot takes</h2>
<ul>
<li>the agent is my to-do list</li>
<li>no longer focused on the code, 5% focus down from 95%</li>
<li>i don't use these tools, i hire them into my team</li>
<li>genuine frustration when they lack autonomy</li>
<li>stop making me tell you when to run</li>
<li>skills skills skill skills</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="the-agent-is-my-to-do-list">the agent is my to-do list</h1>
<p>why write something down in a to-do list when i can open a new conversation and write exactly the same text as a prompt?! i immediately switch away and carry on with my day, like with a to-do list.</p>
<p>but my agent is connected to our code and to all of our analytics, so almost every time when I switch back it has context and challenge. or a PR</p>
<p>to-do list on steroids</p>
<h1 id="no-longer-focused-on-the-code-5-focus-down-from-95">no longer focused on the code, 5% focus down from 95%</h1>
<p>Last time I said:</p>
<blockquote>
<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>
</blockquote>
<p>I can literally never write a line of code manually anymore and it is so ok.</p>
<p>Because the cost of understanding the code is basically zero now. The importance of the code being understandable is dropping.</p>
<p>It still has to be correct and fast but if I can't quickly grok it. I can just ask an LLM to explain it, or write some tests to exercise it. What might have taken hours in the past, I've worked on code that took me days to understand, will now take seconds.</p>
<p>Writing code is now far from the highest leverage thing I could do with my time</p>
<p>"Oh but Paul some code is very important!"</p>
<p>Yep, and cool, the literal code might still be the highest leverage thing <em>you</em> can do. But it isn't the highest leverage thing I could do any more. And I'd argue for many people that's true too.</p>
<p>And that is truly magical because now I can care about and achieve a bunch of stuff all at the same time and that would have been impossible for 2025 Paul.</p>
<h1 id="i-dont-use-these-tools-i-hire-them-into-my-team">i don't use these tools, i hire them into my team</h1>
<p>If I am nailing two pieces of wood together it is up to me to figure out how to do it. To choose the hammer. To choose the nail. To pick the place and the angle that the nail goes in. To make sure I don't hit my thumb.</p>
<p>If I hire a carpenter then I make them a brew and tell them I'm here if they need me.</p>
<p>So, the mindset shift I'm suggesting is that I am hiring a junior engineer or product manager or whatever. And I am responsible for giving them context and guard rails. And then I let them do their work. I'm still responsible for if the work is valuable, but I'm not literally hitting the nail any more.</p>
<p>It changes so much about how I interact with the thing. And it lets me completely change how I work. I've moved into an executive role and I can still sling lots of code cos I don't hold the hammer, I hire the carpenter.</p>
<h1 id="genuine-frustration-when-they-lack-autonomy">genuine frustration when they lack autonomy</h1>
<p>We run a bunch of AI review tools on our PRs. And they have varying quality. They get better over time bit by bit. And they are earning their keep (just about - although they're pretty expensive tbh)</p>
<p>But over the last months since part 4 I've noticed a new expectation from me… they post their comment and I think "ugh, now i have to read and act on that… such bullshit"</p>
<p>By comparison, I have a "PR Shepherd" skill. I've had Claude do research about XP on the C2 wiki. I've had it interview me about software engineering to see what I care about in how work is done. And I've had it review the public history of my PR reviews to see what I care about in reviewing.</p>
<p>And when I run that skill it does a bunch of reviews in parallel, and anything that has a single solution, it just does. You can see <a href="https://github.com/PostHog/posthog/pull/61611">an example here</a> - I have it run and publicly comment on all of my PRs. It now feels rude to have a human review before I've had the robot find things. In the same way that for the longest time it's been rude to make a human lint your code when a tool could do it.</p>
<p>So, increasingly, the word machine can no longer earn its keep by only turning one set of words into another. It needs to turn that set of words into action. Just like if I hire a junior engineer and they asked me "should i fix this obvious bug" i would be frustrated.</p>
<h1 id="stop-making-me-tell-you-when-to-run">stop making me tell you when to run</h1>
<p>this has a side effect… i don't want to have to remember to ask an LLM for a whole bunch of stuff. same way i don't want to have to ask my colleagues about a bunch of stuff.</p>
<p>i want to say "hey, we should check the clink expander every two hours and route fanglers appropriately" and that just happens</p>
<p>i think the next great frontier is long-running and trigger-driven agents. and i am so excited for it</p>
<h1 id="skills-skills-skill-skills">skills skills skill skills</h1>
<p>I mention "PR shepherd" above. It does all the mechanical work of getting a PR through review. It checks if a PR is open, opens it if not. marks it ready for review, runs a swarm of parallel reviewers and responds to them, checks external reviews and responds to them. It defers to me when it has to, otherwise it checks CI until it's green. It took me about an hour in total so far prompting to create it. And has saved me multiples of that.</p>
<p>Soooo much time back.</p>
<p>I have "Paul pair". Every time the robot finishes work or is about to ask me a question it has an instruction to run the "Paul pair" skill. Which reminds it what I care about and to only interrupt me with important things. It's mecha paul. Saving meat paul from repeating the thing i was obviously going to repeat.</p>
<p>I have an executive coach (admittedly not a skill). It checks granola and slack and github and the org chart etc etc and once a week tells me if I'm working on what I've said is important. Tells me what I'm missing, what patterns it sees, what the top 3 things I should do to get back on track. It's not always right, but it doesn't have to be - it's on me to manage my work and attention regardless of what advice i receive.</p>
<p>If you have never done it then stop what you're doing. Open a new session with your favourite robot and type "look at our conversations and tell me what repeated interactions we could automate"</p>
<p>Then sit back and prepare to have your mind blown.</p>
<p><a href="https://github.com/pauldambra/dotfiles/tree/main/ai/skills">Here are all my public skills</a></p>
<h1 id="paul-you-sound-irredeemably-ai-pilled">paul, you sound irredeemably AI pilled</h1>
<p>yep, I am. sorry, it's happened. there's no going back. i've been sucked into the bubble. this is the future.</p>
<p>"but LLMs gets things wrong sometimes!"</p>
<p>yep, and this might shock you. so do human colleagues. even incredible colleagues can do silly things. yes, reader, even I have once or twice shipped a bug</p>
<p>it's not about the LLM being perfect. it doesn't have to be perfect. it's about the LLM being useful. And it really f-in is.</p>
</description>
<pubDate>Thu, 04 Jun 2026 08:00:00 +0000</pubDate>
<link>
https://pauldambra.dev/2026/06/how-i-use-llms-5.html
</link>
<guid isPermaLink="true">
https://pauldambra.dev/2026/06/how-i-use-llms-5.html
</guid>
</item>
<item>
<title>Where have I been?</title>
<description><p>At a recent company offsite a bunch of people asked me how many of the off-sites I'd been on. I didn't remember so I made this list since if I don't remember now I have no chance of remembering in 5 or 10 years.</p>
<!--more-->
<h2 id="2021">2021</h2>
<table>
<thead>
<tr>
<th>Place</th>
<th>Type</th>
<th>Note</th>
<th>Hackathon</th>
</tr>
</thead>
<tbody>
<tr>
<td>London</td>
<td><em>my</em> onboarding</td>
<td>Jams said "just do the right thing" which was a good signal this company was cool</td>
<td> </td>
</tr>
<tr>
<td>Milan</td>
<td>working, not a company trip</td>
<td>i just had to go to Italy for my soul after covid</td>
<td> </td>
</tr>
</tbody>
</table>
<h2 id="2022">2022</h2>
<table>
<thead>
<tr>
<th>Place</th>
<th>Type</th>
<th>Note</th>
<th>Hackathon</th>
</tr>
</thead>
<tbody>
<tr>
<td>Barcelona</td>
<td>all engineering offsite</td>
<td>got hard feedback, realised I had to up my game</td>
<td> </td>
</tr>
<tr>
<td>Iceland</td>
<td>all company offsite</td>
<td>my first posthog hackathon, realised just how talented everyone was</td>
<td>writing session replay ingestion to s3. it was a bad implementation.</td>
</tr>
<tr>
<td>Cambridge</td>
<td>onboarding</td>
<td>the one where i felt i could talk about posthog well</td>
<td> </td>
</tr>
<tr>
<td>Montesilvano</td>
<td>working, not a company trip</td>
<td>I just needed time alone</td>
<td> </td>
</tr>
<tr>
<td>Rome</td>
<td>small team offsite</td>
<td>this was the turning point for me being successful and feeling at home at PostHog. I got amazing, direct, constructive feedback. life-changing, no cap</td>
<td>in-app notifications on top of the activity log</td>
</tr>
<tr>
<td>Cambridge</td>
<td>onboarding</td>
<td>the one where we got locked in one of the Cambridge colleges after maybe breaking in</td>
<td> </td>
</tr>
<tr>
<td>Lisbon</td>
<td>work-blast</td>
<td>the one where Ben and I wanted to prove network logging was quick to build - it was. Kaarl told me my schema design was good, I was so in awe of his clickhouse brain i thought i'd faint</td>
<td>network request logging in replay</td>
</tr>
</tbody>
</table>
<h2 id="2023">2023</h2>
<table>
<thead>
<tr>
<th>Place</th>
<th>Type</th>
<th>Note</th>
<th>Hackathon</th>
</tr>
</thead>
<tbody>
<tr>
<td>Aruba</td>
<td>all company offsite</td>
<td>the one where we celebrated turning into a juggernaut</td>
<td>bug reporting tool in PostHog</td>
</tr>
<tr>
<td>Cambridge</td>
<td>onboarding</td>
<td>the one where i made pizza with bread flour, no bueno</td>
<td> </td>
</tr>
<tr>
<td>Glossop, UK</td>
<td>onboarding</td>
<td>the one where i couldn't travel and so the team braved Glossop, i made some pretty good pizza</td>
<td> </td>
</tr>
<tr>
<td>Bologna</td>
<td>small team offsite</td>
<td>the one where posthog 3000 was born, we presented each other's ideas. It was silly, laughed so much</td>
<td>Sampling for session replay</td>
</tr>
</tbody>
</table>
<h2 id="2024">2024</h2>
<table>
<thead>
<tr>
<th>Place</th>
<th>Type</th>
<th>Note</th>
<th>Hackathon</th>
</tr>
</thead>
<tbody>
<tr>
<td>Trapani</td>
<td>work blast</td>
<td>Ben and I wanted to prove Heatmaps was quick to ship, it was</td>
<td>Heatmaps</td>
</tr>
<tr>
<td>Vienna</td>
<td>onboarding</td>
<td>the best beetroot i've had to date, my favourite part of italy</td>
<td> </td>
</tr>
<tr>
<td>Cambridge</td>
<td>onboarding</td>
<td>manoel did amazing bbq steak</td>
<td> </td>
</tr>
<tr>
<td>Valencia</td>
<td>small team offsite</td>
<td>the one where i realised i could push people more</td>
<td>AI summarisation of survey responses</td>
</tr>
</tbody>
</table>
<h2 id="2025">2025</h2>
<table>
<thead>
<tr>
<th>Place</th>
<th>Type</th>
<th>Note</th>
<th>Hackathon</th>
</tr>
</thead>
<tbody>
<tr>
<td>Cambridge</td>
<td>onboarding</td>
<td>very cold, we saw a fox, Ben improv'd the architecture diagram</td>
<td> </td>
</tr>
<tr>
<td>Budapest</td>
<td>onboarding</td>
<td>great coffee, so many irish bars</td>
<td> </td>
</tr>
<tr>
<td>Tulum, Mexico</td>
<td>all company offsite 2025</td>
<td>the one where i realised just how much we'd grown</td>
<td>CSP violation reporting… that has started to make bank now</td>
</tr>
<tr>
<td>Munich</td>
<td>onboarding</td>
<td>my first ever visit to germany, how?!</td>
<td> </td>
</tr>
<tr>
<td>Palermo</td>
<td>small team offsite</td>
<td>the one where we experimented with combining small team offsites (and it changed things a lot)</td>
<td>letting people add screenshots to action and event definitions</td>
</tr>
<tr>
<td>London</td>
<td>xmas hackathon and onboarding</td>
<td>the one where Tue got very excited about a smash burger</td>
<td>tooling to make session replay support easier</td>
</tr>
</tbody>
</table>
<h2 id="2026">2026</h2>
<table>
<thead>
<tr>
<th>Place</th>
<th>Type</th>
<th>Note</th>
<th>Hackathon</th>
</tr>
</thead>
<tbody>
<tr>
<td>Lisbon</td>
<td>analytics platform small team offsite</td>
<td>the one where we figured out how to make a query performance team</td>
<td>adding AI summary to insight subscriptions</td>
</tr>
<tr>
<td>Barbados</td>
<td>all company offsite</td>
<td>my first all team offsite as an exec. lots of great feedback and pina coladas</td>
<td>creating an AI user researcher</td>
</tr>
</tbody>
</table>
<p>It turns out I've been away from home for roughly 26 weeks in the time I've been at PostHog. Or roughly 10% of the weeks I've worked here. Wouldn't change it for the world.</p>
</description>
<pubDate>Fri, 22 May 2026 10:00:00 +0000</pubDate>
<link>
https://pauldambra.dev/2026/05/22/where-have-i-been.html
</link>
<guid isPermaLink="true">
https://pauldambra.dev/2026/05/22/where-have-i-been.html
</guid>
</item>
<item>
<title>Let's plan that</title>
<description><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>
</description>
<pubDate>Fri, 13 Mar 2026 10:00:00 +0000</pubDate>
<link>
https://pauldambra.dev/2026/03/13/why-plan.html
</link>
<guid isPermaLink="true">
https://pauldambra.dev/2026/03/13/why-plan.html
</guid>
</item>
<item>
<title>How I use LLMs? - four</title>
<description><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>
</description>
<pubDate>Tue, 10 Mar 2026 08:00:00 +0000</pubDate>
<link>
https://pauldambra.dev/2026/03/how-i-use-llms-4.html
</link>
<guid isPermaLink="true">
https://pauldambra.dev/2026/03/how-i-use-llms-4.html
</guid>
</item>
<item>
<title>I shipped 1000 PRs in a year, AMA</title>
<description><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>