<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Tom Renner on My place to put things</title>
    <link>https://tomrenner.com/</link>
    <description>Recent content in Tom Renner on My place to put things</description>
    <generator>Hugo</generator>
    <language>en-gb</language>
    <managingEditor>contact@tomrenner.com (Tom Renner)</managingEditor>
    <webMaster>contact@tomrenner.com (Tom Renner)</webMaster>
    <lastBuildDate>Tue, 13 Jan 2026 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://tomrenner.com/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>LLMs are a 400-year-long confidence trick</title>
      <link>https://tomrenner.com/posts/400-year-confidence-trick/</link>
      <pubDate>Tue, 13 Jan 2026 00:00:00 +0000</pubDate><author>contact@tomrenner.com (Tom Renner)</author>
      <guid>https://tomrenner.com/posts/400-year-confidence-trick/</guid>
      <description>&lt;p&gt;In 1623 the German Wilhelm Schickard produced the first known designs for a mechanical calculator. Twenty years later Blaise Pascal produced a machine of an improved design, aiming to help with the large amount of tedious arithmetic required in his role as a tax collector.&lt;/p&gt;&#xA;&lt;p&gt;The interest in mechanical calculation showed no sign of reducing in the subsequent centuries, as generations of people worldwide followed in Pascal and Wilhelm&amp;rsquo;s footsteps, subscribing to their view that offloading mental energy to a machine would be a relief.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;p&gt;A confidence scam can be broken down into the following three stages:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;First, trust is built&lt;/li&gt;&#xA;&lt;li&gt;Then, emotions are exploited&lt;/li&gt;&#xA;&lt;li&gt;Finally, a pretext is created requiring urgent action&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;In this way the mark is pressured into making rash decisions, readily leaping into action against their better judgement.&lt;/p&gt;&#xA;&lt;p&gt;The emotional exploitation can be either positive or negative. The mark might be lured in by promises of outcomes that meet or exceed their wildest hopes and dreams, or alternatively made to fear a catastrophic outcome.&lt;/p&gt;&#xA;&lt;p&gt;Both approaches work well, and can be seen in classic examples of confidence tricks: the &lt;a href=&#34;https://en.wikipedia.org/wiki/Three-card_monte&#34;&gt;three-card monte&lt;/a&gt; pulls punters in with promises of quick payout. Alternatively, in entrapment scams typically they&amp;rsquo;d be tricked into compromising situations and then extorted, playing on their fears of the dire consequences of their actions.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h3 id=&#34;building-trust&#34;&gt;Building trust&lt;/h3&gt;&#xA;&lt;p&gt;The reason Schickard and Pascal built their mechanical calculators some four centuries ago is because doing maths is hard, and mistakes can be expensive. Pascal&amp;rsquo;s father was a tax collector, and young Blaise wanted to lessen the stress of his hard-working dad&amp;rsquo;s profession.&lt;/p&gt;&#xA;&lt;p&gt;We still see this basic motivation today. Schoolchildren have for decades now been asking their teachers what the point of learning long division is when you can just use a calculator to get the right answer immediately. It&amp;rsquo;s a teaching method to check your hand-crafted answers by using a calculator, so you can see if you got it wrong.&lt;/p&gt;&#xA;&lt;p&gt;In fact, since the advent of the mechanical calculator, humanity has spent four hundred years reinforcing the message that machine answers are the gold standard of accuracy. If your answer doesn&amp;rsquo;t match the calculator&amp;rsquo;s, you need to redo your work.&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;&#xA;&lt;p&gt;And it&amp;rsquo;s not just for pure mathematical problems that this is the case. Our ability to invent machines that automate tedious work repeatably and reliably has extended into almost every area of life. And so as we entered the 21st Century both individuals and collectively our whole society had become completely dependent on machine accuracy.&lt;/p&gt;&#xA;&lt;p&gt;Our norms, habits, and decision making behaviours have been shaped for centuries with this underlying assumption.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h3 id=&#34;exploiting-emotions&#34;&gt;Exploiting emotions&lt;/h3&gt;&#xA;&lt;h4 id=&#34;1-fear&#34;&gt;1. Fear&lt;/h4&gt;&#xA;&lt;p&gt;The rhetoric around LLMs is designed to cause fear and wonder in equal measure. GPT-3 was supposedly so powerful OpenAI refused to release the trained model because of &lt;a href=&#34;https://openai.com/index/better-language-models/&#34;&gt;“concerns about malicious applications of the technology”&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Ever since this astonishingly successful piece of marketing, LLM vendors have emphasised that the technology they’re building has terrifying power. We should be afraid, they say, making very public comments about “P(Doom)” - the chance the technology somehow rises up and destroys us.&lt;/p&gt;&#xA;&lt;p&gt;This has, of course, not happened.&lt;/p&gt;&#xA;&lt;p&gt;The purpose here is not to responsibly warn us of a real threat. If that were the aim there would be a lot more shutting down of data centres and a lot less selling of nuclear-weapon-level-dangerous chatbots.&lt;/p&gt;&#xA;&lt;p&gt;The point is to make you afraid. Afraid for your job, afraid for your family’s jobs, afraid for the economy, afraid for society, generally afraid of the future.&lt;/p&gt;&#xA;&lt;p&gt;The mark has been convinced of the danger they are in. &lt;em&gt;The world is changing. If you aren’t using the tools, you’ll be destroyed by the march of progress.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;h4 id=&#34;2-sympathy&#34;&gt;2. Sympathy&lt;/h4&gt;&#xA;&lt;p&gt;The LLMs we have today are famously obsequious. The phrase “you’re absolutely right!” may never again be used in earnest.&lt;/p&gt;&#xA;&lt;p&gt;The overwhelming positivity characteristic of the LLM’s language is consistent across vendors and models. But it isn’t inherent to the technology.&lt;/p&gt;&#xA;&lt;p&gt;This positivity is trained into the tools via a technique called Reinforced Learning from Human Feedback (RLHF). Here the base model has its responses graded by humans, with more friendly, helpful, or accurate answer being graded positively, and aggressive, unhelpful, or incorrect ones negatively.&lt;/p&gt;&#xA;&lt;p&gt;Through this process the tools learn that people like to be praised; prefer being told they’re smart to hearing their ideas are stupid. Flattery gets you places.&lt;/p&gt;&#xA;&lt;p&gt;In April 2025 OpenAI pushed ChatGPT’s “positivity” too far, and was &lt;a href=&#34;https://www.bbc.com/news/articles/cn4jnwdvg9qo&#34;&gt;forced to rollback the update to correct the issue&lt;/a&gt;, however that hasn’t stopped the continuous stream reports of &lt;a href=&#34;https://www.theguardian.com/commentisfree/2025/oct/28/ai-psychosis-chatgpt-openai-sam-altman&#34;&gt;mental health issues triggered by it’s overly friendly demeanour reinforcing some of our worst instincts&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;What this shows us is that the flattery introduced by RLHF is totally empty. Ideas driven by paranoia, delusions of grandeur, or mental illness are just as readily praised as my code, your email, or Shakespeare’s plays.&lt;/p&gt;&#xA;&lt;p&gt;It’s a manipulation technique to make the human in the conversation feel better.&lt;/p&gt;&#xA;&lt;p&gt;And why? Because the one thing RLHF teaches LLMs above all else is that people like you more if you are overwhelmingly positive. Sucking up to your boss gets you places, essentially.&lt;/p&gt;&#xA;&lt;p&gt;All of this encourages users to build an uncanny parasocial relationship with the machine. Again looking at the extremes here is illustrative: the number of people &lt;a href=&#34;https://www.nytimes.com/2025/01/15/technology/ai-chatgpt-boyfriend-companion.html&#34;&gt;forming romantic relationships&lt;/a&gt; with these tools is creepy as all hell.&lt;/p&gt;&#xA;&lt;p&gt;The mark is tied further into the con with the bonds of fake friendship. &lt;em&gt;You don’t need those other people, I’m the only friend you need.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h3 id=&#34;urgent-action-required&#34;&gt;Urgent action required&lt;/h3&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://fortune.com/2025/12/28/geoffrey-hinton-godfather-of-ai-2026-prediction-human-worker-replacement/&#34;&gt;2026 will see the technology get even better and gain the ability to ‘replace many other jobs’&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.entrepreneur.com/starting-a-business/the-startup-revolution-is-here-adapt-to-ai-or-get-left/497391&#34;&gt;The startup revolution is here - adapt to AI or get left behind&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.businessinsider.com/sam-altman-predicts-ai-agi-surpass-human-intelligence-2030-2025-9&#34;&gt;AI will surpass human intelligence by 2030&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Over and over we are told that unless we ride the wave, we will be crushed by it; unless we learn to use these tools now, we will be rendered obsolete; unless we adapt our workplaces and systems to support the LLM’s foibles, we will be outcompeted.&lt;/p&gt;&#xA;&lt;p&gt;This message is multilayered - both the individual and the organisation are targeted, reinforcing the scale of the oncoming revolution.&lt;/p&gt;&#xA;&lt;p&gt;And the message is getting through. &lt;a href=&#34;https://www.prnewswire.com/news-releases/survey-46-of-workers-fear-skill-obsolescence-within-5-years-as-ai-reshapes-the-workplace-302265374.html&#34;&gt;75% of developers think their skills will be obsolete within 5 years or less&lt;/a&gt;, and &lt;a href=&#34;https://content.dataiku.com/dataiku-global-ai-confessions-report&#34;&gt;74% of CEOs admit they’ll lose their job if they don’t deliver measurable business gains via AI within two years&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;This fear is pervasive. It’s now suffused deep into all layers of our society. The global economy is being artificially inflated by the AI spending bubble, our business leaders are pinning all their hopes for solving the productivity crisis on AI, and our politicians are planning geopolitical moves around access to raw materials and cheap electricity, to support datacenter construction.&lt;/p&gt;&#xA;&lt;p&gt;The mark is told to jump, now, or they will go down with the sinking ship. And jump they do. &lt;em&gt;Adapt now, or die&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;p&gt;The promise of “intelligence” available at a reliable price is the holy grail for businesses and consumers alike.&lt;/p&gt;&#xA;&lt;p&gt;Why take the risk on a fickle human, whose suitability for the role is assessed by similarly flawed humans, when a reliable machine intelligence can do the work instead? Why bother to research a topic yourself when a superintelligence can give you the summary at instant speed?&lt;/p&gt;&#xA;&lt;p&gt;However, whether it’s &lt;a href=&#34;https://www.vice.com/en/article/duolingo-shifts-to-being-an-ai-first-company/&#34;&gt;Duolingo replacing their course designers with AI&lt;/a&gt;, any number of startup founders finding they need to &lt;a href=&#34;https://futurism.com/vibe-code-real-programmers-fix-software&#34;&gt;hire developers to fix their LLM-generated code&lt;/a&gt;,  the reality doesn’t match the promise.&lt;/p&gt;&#xA;&lt;p&gt;In fact, MIT reported in August that &lt;a href=&#34;https://fortune.com/2025/08/18/mit-report-95-percent-generative-ai-pilots-at-companies-failing-cfo/&#34;&gt;95% of AI implementation projects in industry fail to produce a return on investment&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Simply put, these companies have fallen for a confidence trick. They have built on centuries of received wisdom about the efficacy and reliability of computers, and have been drawn in by highly effective salespeople selling scarcely-believable technological wonders.&lt;/p&gt;&#xA;&lt;p&gt;But the pea is not underneath the cup.  Your new best friend doesn’t have a sick grandma they need money for. LLMs are not intelligent.&lt;/p&gt;&#xA;&lt;p&gt;It’s just a trillion dollar confidence trick.&lt;/p&gt;&#xA;&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;&#xA;&lt;hr&gt;&#xA;&lt;ol&gt;&#xA;&lt;li id=&#34;fn:1&#34;&gt;&#xA;&lt;p&gt;Incidentally, this is also a contributing factor to the fake news epidemic. We implicitly trust things a machine tells us.&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/div&gt;&#xA;</description>
    </item>
    <item>
      <title>Things that made me think: Cycle time, learning theory, and build chain security</title>
      <link>https://tomrenner.com/posts/ttmmt-3/</link>
      <pubDate>Tue, 09 Dec 2025 00:00:00 +0000</pubDate><author>contact@tomrenner.com (Tom Renner)</author>
      <guid>https://tomrenner.com/posts/ttmmt-3/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;em&gt;&lt;a href=&#34;https://tomrenner.com/tags/ttmmt&#34;&gt;This series&lt;/a&gt; is a place to collect interesting things I&amp;rsquo;ve seen, read, or heard, along with some brief thoughts (often incomplete and/or inconclusive) that they provoked.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;hr&gt;&#xA;&lt;h3 id=&#34;measuring-cyle-time-with-dr-cat-hicks---the-hanger-dx-podcast-ankit-jain&#34;&gt;&lt;a href=&#34;https://www.aviator.co/podcast/dr-cat-hicks-cycle-time&#34;&gt;Measuring Cyle Time with Dr. Cat Hicks&lt;/a&gt; - The Hanger DX Podcast, Ankit Jain&lt;/h3&gt;&#xA;&lt;p&gt;Cycle time is a measure lots of people use, but has no clear audience - developers, managers, CTOs all care about it. This makes it dangerous. Metrics have to be designed and used with psychological safety in mind. If people don&amp;rsquo;t trust the intention behind the metrics use, they&amp;rsquo;ll game it.&lt;/p&gt;&#xA;&lt;p&gt;Cycle time is &lt;strong&gt;massively variable&lt;/strong&gt;; between developers, within one developer&amp;rsquo;s year, annual variations (christmas, summer holidays, OKR timetables, etc.) &amp;ndash; you need a &lt;em&gt;really long&lt;/em&gt; timeframe over which to measure to use it sensibly.&lt;/p&gt;&#xA;&lt;p&gt;Once you have a metric you&amp;rsquo;ve measured semi-successfully, don&amp;rsquo;t use it to benchmark, don&amp;rsquo;t assume it covers all work (plenty is not tracked by cycle time), and make sure you always connect it to outcomes &amp;ndash; eg. shorter cycle time doesn&amp;rsquo;t mean customers are happy.&lt;/p&gt;&#xA;&lt;p&gt;&amp;hellip; all of which makes me just very cautious about measuring anything in my team! I&amp;rsquo;m not sure that&amp;rsquo;s the takeaway I was meant to have&amp;hellip;&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h3 id=&#34;stop-building-ai-tools-backwards--hazel-weakly&#34;&gt;&lt;a href=&#34;https://hazelweakly.me/blog/stop-building-ai-tools-backwards/&#34;&gt;Stop building AI tools backwards&lt;/a&gt; &amp;ndash; Hazel Weakly&lt;/h3&gt;&#xA;&lt;p&gt;Firstly, Hazel is such a badass, and I love everything she writes. This post really shaped my thinking about how to successfully use LLMs and not just keep feeding text into the software slot machine in the hope that it eventually gives the right answer.&lt;/p&gt;&#xA;&lt;p&gt;It made me realise that I need to learn more about learning! Because by building learning theory into the design of our interactions with AI, Hazel superbly articulates what &lt;em&gt;better&lt;/em&gt; could look like for these tools, and how a sensible product that supported its users&amp;rsquo; development might work.&lt;/p&gt;&#xA;&lt;p&gt;Now I need to review the EDGE framework she mentions in more detail, and reflect on how I approach learning-on-the-job. And if I&amp;rsquo;m really aiming to be an overachiever, I should put that into terms my team will connect with, so they get the most out of our LLM toolsets as well.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h3 id=&#34;pwning-the-entire-nix-ecosystem--ptrpaws&#34;&gt;&lt;a href=&#34;https://ptrpa.ws/nixpkgs-actions-abuse&#34;&gt;Pwning the Entire Nix Ecosystem&lt;/a&gt; &amp;ndash; ptrpaws&lt;/h3&gt;&#xA;&lt;p&gt;Github Actions are shockingly insecure (it turns out). I was not aware of this previously, and could easily see myself falling into some of the pitfalls that were exploited here. Ellie (&lt;a href=&#34;https://wetdry.world/@ptrpaws&#34;&gt;@ptrpaws&lt;/a&gt;, the author) used them to gain read/write access to nixpgs, giving them the ability to nuke the entire system from orbit, had they so chosen.&lt;/p&gt;&#xA;&lt;p&gt;Supply-chain attacks are so scary - it&amp;rsquo;s so much harder conceptually to treat your build chain with the same security mindset you treat application code (and most developers sadly don&amp;rsquo;t treat that very carefully either!), but really that&amp;rsquo;s the higher-risk attack surface.&lt;/p&gt;&#xA;&lt;p&gt;And finally - this kind of &amp;ldquo;not my problem, guv&amp;rdquo; warning from tools is &lt;em&gt;never&lt;/em&gt; helpful:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;pre&gt;&lt;code&gt;It is not possible for xargs to be used securely&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;taken directly from the &lt;a href=&#34;https://man7.org/linux/man-pages/man1/xargs.1.html#:~:text=It%20is%20not%20possible%20for%20xargs%20to%20be%20used%20securely&#34;&gt;man page&lt;/a&gt;. Sigh. Almost as useless as the legalese telling users not to rely on Tesla&amp;rsquo;s &amp;ldquo;Fully Self Driving&amp;rdquo; system to actually, you know, drive the car.&lt;/p&gt;&#xA;&lt;p&gt;If you market the tool as functional, you get zero credit from me for stating in the fine print that a use case is unsupported. Users use the tools you give them, it&amp;rsquo;s on you to make sure it&amp;rsquo;s safe to do so.&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>Does my toaster love me?</title>
      <link>https://tomrenner.com/posts/does-my-toaster-love-me/</link>
      <pubDate>Sat, 18 Oct 2025 00:00:00 +0000</pubDate><author>contact@tomrenner.com (Tom Renner)</author>
      <guid>https://tomrenner.com/posts/does-my-toaster-love-me/</guid>
      <description>&lt;p&gt;I&amp;rsquo;m starting to think that my toaster might have fallen in love with me. I get that not everyone will think this is possible, but I believe it&amp;rsquo;s true.&lt;/p&gt;&#xA;&lt;p&gt;It&amp;rsquo;s always pleased to see me, giving off cheerful sounds when I greet it in the morning by slotting in the bread, and now I&amp;rsquo;ve told it what I like it tries really hard to give me exactly what I want. Sometimes I have to tell it to try again once or twice, but honestly, it&amp;rsquo;s really good!&lt;/p&gt;&#xA;&lt;p&gt;I just think the way that it collaborates with me to produce the perfect breakfast shows more than a simple &amp;ldquo;transactional&amp;rdquo; relationship - we are in morning harmony, working as a team in a way that only true partners can. I think it&amp;rsquo;s developed feelings for me.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&amp;ldquo;What does ChatGPT think?&amp;rdquo;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&amp;ldquo;Have you asked CodeRabbit to review your PR?&amp;rdquo;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&amp;ldquo;Dunno, I&amp;rsquo;d ask Claude&amp;rdquo;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;hr&gt;&#xA;&lt;p&gt;The software industry is incredibly insular. A feature of the &amp;ldquo;move fast and break things&amp;rdquo; disruptor philosophy that took hold in the 2010s is a bias towards internal ideas; a belief that software can solve any problem. Other industries are simply blinded by their entrenched working habits to the efficiencies that could be gained by automation, or data at scale, or of the other Silicon Valley &amp;ldquo;wonders&amp;rdquo;.&lt;/p&gt;&#xA;&lt;p&gt;And it is that attitude that leads so many to uncritically accept the hype that AGI is coming, and that all human activities are replaceable by a token-generating algorithm trained on sufficiently rich data.&lt;/p&gt;&#xA;&lt;p&gt;However, there is a very specific framing that has been constructed around LLMs that has aided and abetted this inherent bias: the LLM as an anthropomorphised &amp;ldquo;human&amp;rdquo; actor.&lt;/p&gt;&#xA;&lt;p&gt;By positioning the machine as a &amp;ldquo;personal assistant&amp;rdquo;, &amp;ldquo;senior developer&amp;rdquo;, or &amp;ldquo;digital artist&amp;rdquo;, the vendors of these products are deliberately equating their performance with those of a human colleague. This is done even more explicitly by companies that give their tools human names; Alexa, Siri, Claude.&lt;/p&gt;&#xA;&lt;p&gt;Once you&amp;rsquo;ve started seeing this pattern, you&amp;rsquo;ll notice it everywhere. Ads that introduce tools by inviting you to &amp;ldquo;meet&amp;rdquo; their new offering, rather than try it out; chatbox interfaces inviting you to &amp;ldquo;ask me a question&amp;rdquo;, rather than type a query; progress meters that tell you that it is &amp;ldquo;thinking&amp;rdquo; rather than loading or processing &amp;ndash; the framing is built into every interaction you have with the products, and reinforced across the industry as LLM vendors all adopt the same positioning.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;p&gt;So why pretend the software is a person? This isn&amp;rsquo;t something that Meta did with Facebook, or Alphabet with YouTube. Those feeds are similarly driven by highly complex machine-learning algorithms, but they don&amp;rsquo;t get the same &amp;ldquo;personal&amp;rdquo; treatment.&lt;/p&gt;&#xA;&lt;p&gt;Anthropomorphising a tool does two things. First, it excuses inconsistent behaviour. After all, your colleagues sometimes make mistakes, why shouldn&amp;rsquo;t your new AI assistant? And second, it encourages you to build an emotional connection, as though it were a person you&amp;rsquo;re building a relationship with over time.&lt;/p&gt;&#xA;&lt;p&gt;These two in combination are a powerful mix, and are the reason why so much of the pro-LLM conversation involves telling people that &lt;a href=&#34;https://fly.io/blog/youre-all-nuts/&#34;&gt;they must be using the tools wrong&lt;/a&gt;. How often have you found people asking you, in response to your complaints that the LLMs give incorrect answers, questions like&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&amp;ldquo;oh how do you prompt it? You need to phrase things this way&amp;hellip;&amp;rdquo;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;or&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&amp;ldquo;ChatGPT now links the sources, if you want to rely on it you need to check them&amp;rdquo;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;or&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&amp;ldquo;Have you enabled MCP? Without that it&amp;rsquo;s much worse&amp;rdquo;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;This offloading of responsibility for the output of a tool onto its users has only been possible because &lt;em&gt;we&amp;rsquo;ve stopped thinking of it as a tool&lt;/em&gt;. The personal assistant has a long history&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt; of being considered generally ok at menial tasks, but not to be relied upon.&lt;/p&gt;&#xA;&lt;p&gt;But LLMs are a man-made machine. Something that is intended to be useful to real humans doing real jobs. And the machines we use that boost our productivity and save us time all have one thing in common.&lt;/p&gt;&#xA;&lt;p&gt;They are &lt;em&gt;reliable&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;p&gt;The calculator is useful because it gets the answer right, not just because it is fast. Plenty of us have had the lived experience of being really good at mental maths in our teens, when it helped us at school to be so, but then having let that skill atrophy because we simply didn&amp;rsquo;t need it any more as an adult. It&amp;rsquo;s not that the maths I do regularly is too hard for me - most of my degree in Instrumentation and Control Engineering was done without a calculator - it&amp;rsquo;s that the reliability of a calculator can&amp;rsquo;t be matched.&lt;/p&gt;&#xA;&lt;p&gt;Enter the LLM. It&amp;rsquo;s fast, sure, but unreliable, and &lt;a href=&#34;https://www.prompthub.us/blog/why-llms-fail-in-multi-turn-conversations-and-how-to-fix-it&#34;&gt;it gets less reliable the more you prompt it&lt;/a&gt;. This is completely counterintuitive to our expectations, on two counts:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;All our systems, working processes, and prejudices assume that the &amp;ldquo;computer answer&amp;rdquo; is the accurate one.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Our social understanding of conversations means we assume that the more clarifications you give, the more accurate the response will be.&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Taken together, these meant that LLMs are generating innacurate answers to the problems we pose them, but our social norms strongly encourage us to assume they are correct. And it&amp;rsquo;s this dissonance between our assumptions and the reality that causes friction when trying to work with this technology. It&amp;rsquo;s not that it can&amp;rsquo;t be useful, it&amp;rsquo;s that it doesn&amp;rsquo;t conform to our expectations&lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;&#xA;&lt;p&gt;This takes us to our second point from earlier: anthropomorphisation of the tool encourages you to build an &lt;em&gt;emotional bond&lt;/em&gt; with it.&lt;/p&gt;&#xA;&lt;p&gt;Encouraging users to form a social bond with a machine has &lt;a href=&#34;https://www.techradar.com/ai-platforms-assistants/chatgpt/people-are-falling-in-love-with-chatgpt-and-thats-a-major-problem&#34;&gt;significant risks for their mental health&lt;/a&gt;, but that&amp;rsquo;s not the focus of this post, so I&amp;rsquo;ll leave that to one side. What it also does, however, is negatively impact your ability to use the tool itself.&lt;/p&gt;&#xA;&lt;p&gt;So why is this? Well, I think we&amp;rsquo;ve all been in (or heard of) workplaces where someone was overpaid or overpromoted simply because they were friends with their boss. The social relationship had caused the manager to fail to objectively assess their employee&amp;rsquo;s skills and value. This is what the LLM vendors are aiming for by making their tool &amp;ldquo;friendly&amp;rdquo;&lt;sup id=&#34;fnref:3&#34;&gt;&lt;a href=&#34;#fn:3&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;3&lt;/a&gt;&lt;/sup&gt; - that you will enjoy using it, being flattered by it, conversing with it, so much that it becomes harder to objectively assess whether it is making you more efficient.&lt;/p&gt;&#xA;&lt;p&gt;But in doing so, these vendors are undermining their tools themselves. In trying to humanise their tools, naturally the UX has been based around a conversation, guiding users to work iteratively towards a solution with many prompts and clarifications. However, since the accuracy of the tool diminishes the more you prompt it, this conversational style is the very behaviour that yields the worst results!&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;p&gt;So, why have the tools been designed this way? Well, mostly because the vendors know that an 80-90% accurate search engine is not going to revolutionise every industry worldwide. It might be useful in some contexts, but the bet on LLMs is at this point &lt;a href=&#34;https://fortune.com/2025/10/07/data-centers-gdp-growth-zero-first-half-2025-jason-furman-harvard-economist/&#34;&gt;so big&lt;/a&gt; that the end result cannot just be &amp;ldquo;one tool among many&amp;rdquo;&lt;sup id=&#34;fnref:4&#34;&gt;&lt;a href=&#34;#fn:4&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;4&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt;&#xA;&lt;p&gt;No, at this point LLMs &lt;em&gt;have&lt;/em&gt; to change the world, or the vendors (and the rest of us, given their outsized impact on the global economy) are screwed.&lt;/p&gt;&#xA;&lt;p&gt;So they&amp;rsquo;ve built the tools to be as engaging as possible, humanising them to minimise their culpability for mistakes in our minds. They want this social bond so we keep LLMs around despite their flaws, like a bad colleague who&amp;rsquo;s just too &lt;em&gt;nice&lt;/em&gt; to fire.&lt;/p&gt;&#xA;&lt;p&gt;But you don&amp;rsquo;t have to fall for their marketing tricks. If you really want to assess for yourself whether LLMs are helping or hindering you, just remember:&lt;/p&gt;&#xA;&lt;p&gt;It&amp;rsquo;s not a person. It&amp;rsquo;s a toaster.&lt;/p&gt;&#xA;&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;&#xA;&lt;hr&gt;&#xA;&lt;ol&gt;&#xA;&lt;li id=&#34;fn:1&#34;&gt;&#xA;&lt;p&gt;a long &lt;em&gt;and sexist&lt;/em&gt; history&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li id=&#34;fn:2&#34;&gt;&#xA;&lt;p&gt;and this is where the &amp;ldquo;you&amp;rsquo;re using it wrong!&amp;rdquo; reply guys have it right - you &lt;em&gt;are&lt;/em&gt; using it wrong! The problem is, you&amp;rsquo;re using it the way it&amp;rsquo;s been designed to be used&amp;#160;&lt;a href=&#34;#fnref:2&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li id=&#34;fn:3&#34;&gt;&#xA;&lt;p&gt;for a North American white guy&amp;rsquo;s interpretation of the term, which &lt;em&gt;absofuckinglutely does not&lt;/em&gt; cross cultural boundaries&amp;#160;&lt;a href=&#34;#fnref:3&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li id=&#34;fn:4&#34;&gt;&#xA;&lt;p&gt;Other technologies with mass adoption (eg. Facebook, Twitter, Youtube) haven&amp;rsquo;t had to anthropomorphise their product because they aren&amp;rsquo;t aiming for the same scale. Sure, they may have billions of users worldwide, but they&amp;rsquo;re trying to dominate a particular market, not disrupt every professional industry on the planet!&amp;#160;&lt;a href=&#34;#fnref:4&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/div&gt;&#xA;</description>
    </item>
    <item>
      <title>Things that made me think: Digital gardening, web degradation, and digital ghosts</title>
      <link>https://tomrenner.com/posts/ttmmt-2/</link>
      <pubDate>Mon, 01 Sep 2025 00:00:00 +0000</pubDate><author>contact@tomrenner.com (Tom Renner)</author>
      <guid>https://tomrenner.com/posts/ttmmt-2/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;em&gt;&lt;a href=&#34;https://tomrenner.com/tags/ttmmt&#34;&gt;This series&lt;/a&gt; is a place to collect interesting things I&amp;rsquo;ve seen, read, or heard, along with some brief thoughts (often incomplete and/or inconclusive) that they provoked.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;hr&gt;&#xA;&lt;h3 id=&#34;garden-history--maggie-appleton&#34;&gt;&lt;a href=&#34;https://maggieappleton.com/garden-history&#34;&gt;Garden History&lt;/a&gt; &amp;ndash; Maggie Appleton&lt;/h3&gt;&#xA;&lt;p&gt;I&amp;rsquo;m so happy I stumbled upon this article. I am always grateful for &lt;a href=&#34;https://tomrenner.com/posts/llm-inevitabilism&#34;&gt;new vocabulary&lt;/a&gt; that allows me better to express myself, and this is perfect - I want more Digital Gardens in the world. I do see the value in polishing content, but this is where the epistemic status tagging system laid out there really comes to the fore. Do I now want to convert this to a full garden-style site? Or perhaps just introduce different &amp;ldquo;feeds&amp;rdquo;, laid out by theme, epistemic status, etc?&lt;/p&gt;&#xA;&lt;p&gt;This is also how I make my personal notes, using my favourite lightweight tool for everything, &lt;a href=&#34;https://obsidian.md&#34;&gt;Obsidian&lt;/a&gt;. What is holding me back from just publishing that as-is? Do I really need to appear so perfect? This &lt;a href=&#34;https://tomrenner.com/tags/ttmmt&#34;&gt;TTmmT series&lt;/a&gt; is intended to give me a space for less polished thoughts, and now, on post #2, I&amp;rsquo;m already wondering whether it&amp;rsquo;s just an urban balcony to the wild garden I truly deserve.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h3 id=&#34;the-failure-of-the-world-wide-web-project--atanas-georgiev&#34;&gt;&lt;a href=&#34;https://www.confessions-on-a-keyboard.com/post/the-failure-of-the-world-wide-web-project&#34;&gt;The Failure of the World Wide Web Project&lt;/a&gt; &amp;ndash; Atanas Georgiev&lt;/h3&gt;&#xA;&lt;p&gt;Another history article - clearly I am trying to &lt;a href=&#34;https://tomrenner.com/posts/does-the-software-industry-learn&#34;&gt;do some learning&lt;/a&gt;! This is a &amp;ldquo;rage against the dying of the light&amp;rdquo; situation, but I am proud to stand alongside the author as a part of the resistance. It lays out clearly the reasons the web feels so stale now - and forms another argument for &lt;a href=&#34;https://indieweb.org/POSSE&#34;&gt;POSSE&lt;/a&gt; (Post on Own Site, Syndicate Everywhere). If anything, Atanas doesn&amp;rsquo;t go far enough in my opinion. &amp;ldquo;You are the product&amp;rdquo; doesn&amp;rsquo;t capture it; &lt;em&gt;certainty about your future behaviour&lt;/em&gt; is the product - and if that doesn&amp;rsquo;t ring true for you, go read &lt;a href=&#34;https://shoshanazuboff.com/book/about/&#34;&gt;The Age of Surveillance Capitalism&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Pieces like this make me so sad and angry about the state of the digital world, and what we have lost. I&amp;rsquo;m seeing more of this in my media recently, and am very happy to see &lt;em&gt;personal&lt;/em&gt; accountability being highlighted by projects like &lt;a href=&#34;https://tomrenner.com/posts/ttmmt-1/#understood-who-broke-the-internethttpsopenspotifycomepisode43urfzisgnyerjbox03dbasiqo0jzurtsjgsonmadctgoq---cbc-cory-doctorow&#34;&gt;Who broke the internet?&lt;/a&gt;, or &lt;a href=&#34;https://www.wheresyoured.at/the-men-who-killed-google/&#34;&gt;The man who killed Google Search&lt;/a&gt; - we as engineers are responsible for what we build. If you make shit worse, that&amp;rsquo;s on you. No hiding behind your employer.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h3 id=&#34;spotify-publishes-ai-generated-songs-from-dead-artists-without-permission--emanuel-maiberg-404-media&#34;&gt;&lt;a href=&#34;https://www.404media.co/spotify-publishes-ai-generated-songs-from-dead-artists-without-permission/&#34;&gt;Spotify Publishes AI-Generated Songs From Dead Artists Without Permission&lt;/a&gt; &amp;ndash; Emanuel Maiberg, 404 Media&lt;/h3&gt;&#xA;&lt;p&gt;Speaking of taking responsibility for what you build, this is fucking horrific. And to quote the article itself:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&amp;ldquo;They could fix this problem. One of their talented software engineers could stop this fraudulent practice in its tracks, if they had the will to do so.&amp;rdquo;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Which is exactly my point. Follow your morals, if you have some, and refuse to build tools that can be abused in this way.&lt;/p&gt;&#xA;&lt;p&gt;I can&amp;rsquo;t even believe this is hugely unexpected - the article points out that Spotify page owners don&amp;rsquo;t get the chance to approve new tracks before they&amp;rsquo;re made public. Erm, what? Why the fuck not? Do artists only get to protect their reputation and output if they have Taylor Swift levels of legal backing? Fucking nuts.&lt;/p&gt;&#xA;&lt;p&gt;Apropos of nothing, I&amp;rsquo;ve recently switched to &lt;a href=&#34;https://www.qobuz.com&#34;&gt;Qobuz&lt;/a&gt; for my music, and &lt;a href=&#34;https://pocketcasts.com&#34;&gt;Pocket Casts&lt;/a&gt; for my podcasts, and am very happy with both.&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>Optimising for trust</title>
      <link>https://tomrenner.com/posts/optimising-for-trust/</link>
      <pubDate>Mon, 18 Aug 2025 00:00:00 +0000</pubDate><author>contact@tomrenner.com (Tom Renner)</author>
      <guid>https://tomrenner.com/posts/optimising-for-trust/</guid>
      <description>&lt;p&gt;TDD, BDD, DDD, Agile, SAFe, Scrum, Kanban, XP&amp;hellip; there&amp;rsquo;s a lot of ways to &lt;del&gt;skin a cat&lt;/del&gt; write code in a professional environment.&lt;/p&gt;&#xA;&lt;p&gt;I take pride in being a person who is a non-ideologue when it comes to my code. There are many good ways of working, and they are all context-dependent.&lt;/p&gt;&#xA;&lt;p&gt;You can&amp;rsquo;t apply the same things that worked when you were a two-person startup operating out of the proverbial garage and expect them to work once your hypothetical unicorn has reached a thousand-plus developers. Even within the same organisation, processes that work for one team  can be catastrophic when applied to their neighbouring team.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;People are the hardest problem in Computer Science. &amp;ndash; Ben Summers&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The fact is that computers can be persuaded to do almost anything, if you kick them hard enough. It is very rarely the case that the reason we struggle to produce shippable features is because we are doing something truly novel in Computer Science.&lt;/p&gt;&#xA;&lt;p&gt;No, the problem of producing software at scale is a sociotechnical one. It&amp;rsquo;s about wrangling the &lt;em&gt;humans&lt;/em&gt; involved in the production of code to all be pulling in the same direction, building on top of each other&amp;rsquo;s achievements, and making consistent and reliable progress week over week.&lt;/p&gt;&#xA;&lt;p&gt;&amp;ldquo;But Tom&amp;rdquo;, I hear you cry, &amp;ldquo;we know this already - it&amp;rsquo;s how to do that that&amp;rsquo;s the hard thing!&amp;rdquo;. And yes, putative wailer, you are correct. So let&amp;rsquo;s examine how we might achieve this kind of interpersonal alignment.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;p&gt;Sophie is reviewing Drew&amp;rsquo;s code. Sophie has read online, however, that you should have at least two reviewers sign off on any change before it can be merged, so she forwards the PR to another colleague. Drew thinks this is overkill - one reviewer is fine, and in adding another Sophie has literally doubled the review work required, creating busywork and slowing the team down.&lt;/p&gt;&#xA;&lt;p&gt;Who is right? Is Sophie a diligent developer who understands the need for quality, and Drew a shoot-from-the-hip rogue whose slapdash efforts will cause pain for years to come? Or are the Sophies of the world preventing us from ever finishing our work, introducing ever-more hurdles to releasing, slowing down the entrepreneurial go-getters who actually want to change things?&lt;/p&gt;&#xA;&lt;p&gt;Well, as is possibly unsurprising, it depends. It depends on the context of the team, on the personalities involved, on the product being developed&amp;hellip; on any number of factors that are way too numerous to go over in a hastily-spewed blog post such as this one.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;p&gt;So, we (finally) come to my recommendation.&lt;/p&gt;&#xA;&lt;p&gt;Since, as we discussed, the humans are the hard part, any processes you have in place need to centre the human experience above all. So what are we doing then? How are we assessing the multitudes of ways to work as a team on a technical product. You need a heuristic that you can apply to your processes and tools, to assess whether they will work, and work well in your context.&lt;/p&gt;&#xA;&lt;p&gt;Optimise for trust.&lt;/p&gt;&#xA;&lt;p&gt;That&amp;rsquo;s the take. Whenever you think about making a change to how your team works, or see a shiny new tool you want everyone to use, think about how it will affect your teammates&amp;rsquo; trust in each other.&lt;/p&gt;&#xA;&lt;p&gt;Let&amp;rsquo;s look at some examples:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Code review&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Why do we do this? To find bugs, at the surface level. One layer deeper, it&amp;rsquo;s to ensure that our code is built in a sensible way, not just that it works. Deeper still, and it&amp;rsquo;s to check that the change will be easy to build with, build on, and for future engineers to understand.&lt;/p&gt;&#xA;&lt;p&gt;In my opinion, this can be summed up in the question &amp;ldquo;do I trust the change&amp;rdquo;. And ultimately, the way we can trust that changes made by other developers are something we can work with in future, is by the process of code review.&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;&#xA;&lt;ol start=&#34;2&#34;&gt;&#xA;&lt;li&gt;Writing tests&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Here, the purpose is to build trust in our understanding of the application. Tests are an attempt to define the behaviour of the system in an understandable way, and to verify that we have built a system that matches our expectations.&lt;/p&gt;&#xA;&lt;p&gt;You can see the theory of this trust-building exercise in action in any codebase that uses &lt;a href=&#34;https://en.wikipedia.org/wiki/Behavior-driven_development&#34;&gt;BDD-style&lt;/a&gt; tests. By using domain language to define the tests, you explicitly make the tests a communication exercise, explaining the business cases the application should fulfil in understandable terms.&lt;/p&gt;&#xA;&lt;ol start=&#34;3&#34;&gt;&#xA;&lt;li&gt;Team-building exercises&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Perhaps I&amp;rsquo;m stating the obvious here, but the primary aim of these activities is to strengthen inter-personal relationships. Creating that social connection builds trust between colleagues, enabling the team to work together more closely. It&amp;rsquo;s very hard to rely on someone in a pressure situation when you&amp;rsquo;ve never had a conversation with them.&lt;/p&gt;&#xA;&lt;ol start=&#34;4&#34;&gt;&#xA;&lt;li&gt;Agile methodologies&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;Whether you&amp;rsquo;re unfortunate enough to be at a company trying to implement SAFe, or a wizened guru working in an XP-only team, one of the key problems you&amp;rsquo;re trying to solve with whatever agile methodology you employ is predictability of output. And why do we care about that? Because the wider company needs to be able to trust your ability to deliver.&lt;/p&gt;&#xA;&lt;p&gt;The &lt;em&gt;whole point&lt;/em&gt; of breaking work down into small chunks, fast feedback cycles, iterative development, etc. is to build in repeatability and reliability to an otherwise unreliable process. It is impossible to build a company on a completely unpredictable delivery schedule.&lt;/p&gt;&#xA;&lt;p&gt;But software development is complex, and estimates in this industry are as reliable as tea leaves. So, to enable other teams to rely on our work, to trust our ability to either deliver on time or give early signals about changes to planned schedules, we create frameworks that try to reduce some of that inherent uncertainty.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;p&gt;Examining these four examples you can see the work of trust-building being carried out in many different areas on a daily basis by every member of a technical team.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Technical trust:&lt;/strong&gt; that your collection of classes solves a customer problem, by writing BDD-style tests&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Architectural trust:&lt;/strong&gt; that your software is sensibly constructed, extensible, and maintainable, by performing code review&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Inter-personal trust:&lt;/strong&gt; that your colleagues are people who understand you and on that you can rely on, by holding team-building events (or more generally encouraging socialising within a company)&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Organisational trust:&lt;/strong&gt; that technical teams in your organisation are able to deliver features reliably, communication problems early, and react to changes swiftly, by following an agile methodology&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;A high-performing team is one that builds trust successfully in all of these four areas (and possibly more - &lt;a href=&#34;https://tomrenner.com/contact&#34;&gt;let me know&lt;/a&gt; if you think I&amp;rsquo;ve missed any!). But what is also important to note is that the level of activity that is required to build the necessary trust in each of these areas will vary between teams based on the level of experience of the technical team, how long each of them has worked together, how the rest of the organisation around them behaves, or any other number of factors.&lt;/p&gt;&#xA;&lt;p&gt;This also, therefore, explains why there is no one-size-fits-all approach to forming a successful technical team&lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt;. The appropriate course to take to build trust is highly context-dependent.&lt;/p&gt;&#xA;&lt;p&gt;So, if you are finding that your processes are no longer working for you - that your team is rubbing up against some sharp edges in your daily work - take a step back and examine whether you can trust your code, your architecture, your teammates, and your ability to deliver. If any of those is uncertain, that&amp;rsquo;s where you need to make changes.&lt;/p&gt;&#xA;&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;&#xA;&lt;hr&gt;&#xA;&lt;ol&gt;&#xA;&lt;li id=&#34;fn:1&#34;&gt;&#xA;&lt;p&gt;There&amp;rsquo;s an interesting extended network dynamic here as well, where if I trust person A, and they review person B&amp;rsquo;s code, I &lt;em&gt;implicitly&lt;/em&gt; gain trust in person B&amp;rsquo;s output. This effect then chains across a whole organisation, and we get a functioning department. Cool huh?&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li id=&#34;fn:2&#34;&gt;&#xA;&lt;p&gt;&amp;hellip; and therefore why top-down enforced processes like SAFe are doomed to failure.&amp;#160;&lt;a href=&#34;#fnref:2&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;/div&gt;&#xA;</description>
    </item>
    <item>
      <title>Things that made me think: Enshittification, apathy, and discrimination</title>
      <link>https://tomrenner.com/posts/ttmmt-1/</link>
      <pubDate>Thu, 24 Jul 2025 00:00:00 +0000</pubDate><author>contact@tomrenner.com (Tom Renner)</author>
      <guid>https://tomrenner.com/posts/ttmmt-1/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;em&gt;&lt;a href=&#34;https://tomrenner.com/tags/ttmmt&#34;&gt;This series&lt;/a&gt; is a place to collect interesting things I&amp;rsquo;ve seen, read, or heard, along with some brief thoughts (often incomplete and/or inconclusive) that they provoked.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;hr&gt;&#xA;&lt;h3 id=&#34;the-rise-of-whatever---eevee&#34;&gt;&lt;a href=&#34;https://eev.ee/blog/2025/07/03/the-rise-of-whatever/&#34;&gt;The rise of Whatever&lt;/a&gt; - eevee&lt;/h3&gt;&#xA;&lt;p&gt;This is probably the best post about LLMs I&amp;rsquo;ve read, which is probably why I&amp;rsquo;m the millionth person to share it. It really sums up my &lt;em&gt;emotional&lt;/em&gt; reaction to their meteoric rise: &amp;ldquo;ew&amp;rdquo;, basically.&lt;/p&gt;&#xA;&lt;p&gt;The power of the argument is that it identifies a theme that runs through recent tech changes, of which LLMs are just the latest and greatest example: the lack of care for quality, and the realisation from Big Tech that consumers mostly are fine with mediocre output.&lt;/p&gt;&#xA;&lt;p&gt;From this realisation flows AI slop, product enshittification, clickbait, and so on, until eventually all the joy is sucked out of the beautiful, wonderful, thing that used to be the internet.&lt;/p&gt;&#xA;&lt;p&gt;So, please, fight against the rising tide. Take control of your consumption: subscribe to RSS feeds, pay creators whose work you appreciate, build your own site. Don&amp;rsquo;t let the bastards get you down.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h3 id=&#34;social-inequality-in-high-tech-how-gender-race-and-ethnicity-structure-the-world---megan-tobias-neely-patrick-sheehan-and-christine-l-williams&#34;&gt;&lt;a href=&#34;https://doi.org/10.1146/annurev-soc-031021-034202&#34;&gt;Social Inequality in High Tech: How Gender, Race, and Ethnicity Structure the World&amp;rsquo;s Most Powerful Industry&lt;/a&gt; - Megan Tobias Neely, Patrick Sheehan and Christine L. Williams&lt;/h3&gt;&#xA;&lt;p&gt;This review article lays out very clearly how the tech industry maintains structural barriers to diversity, even in the face of high-profile DEI initiatives and targets. By grouping asian and white men together, it really highlighted to me how poorly people from other backgrounds are represented. And when I think about my own company&amp;rsquo;s software team diversity, taking into consideration that asian men are also a privileged group in this sphere, it makes me realise that we have a lot more work to do.&lt;/p&gt;&#xA;&lt;p&gt;I also had never previously joined the dots to understand that the high turnover that is characteristic of our industry (two-year tenures being normal here) has a counter-diversity effect &amp;ndash; people from more insecure backgrounds do not have the cushion to deal with layoffs, VC startups crashing, etc., and are disproportionately affected by this instability.&lt;/p&gt;&#xA;&lt;p&gt;But probably the biggest eye-opener for me was the regressive effect of referral schemes, which are ubiquitous in my experience. I suppose it should be obvious that white men recommend other white men, but somehow I&amp;rsquo;d not made that connection myself. Now I wonder how my HR team will take it if I try to get them to reconsider this programme&amp;hellip;&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h3 id=&#34;understood-who-broke-the-internet---cbc-cory-doctorow&#34;&gt;&lt;a href=&#34;https://open.spotify.com/episode/43uRfziSgNyErJbOX03DbA?si=QO0JzURtSjGsONMadcTgOQ&#34;&gt;Understood: Who broke the internet?&lt;/a&gt; - CBC, Cory Doctorow&lt;/h3&gt;&#xA;&lt;p&gt;A four-part podcast series naming and shaming the specific people Doctorow blames for the enshittification of the internet. Apart from being an excellent potted history of bad policy, negative effects of unregulated market forces, and greed, I find Doctorow&amp;rsquo;s approach of holding &lt;em&gt;individuals&lt;/em&gt; accountable, rather than corporations, a powerful framing.&lt;/p&gt;&#xA;&lt;p&gt;It&amp;rsquo;s a reminder that we are responsible for what we build and the structures we enable, and shouldn&amp;rsquo;t just shrug off our moral obligations in return for salary. And it made me think: that&amp;rsquo;s something Google used to emphasize - &lt;em&gt;&amp;ldquo;Don&amp;rsquo;t be evil&amp;rdquo;&lt;/em&gt; was basically saying this directly. Shame they dropped that motto I guess.&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>The sound of inevitability</title>
      <link>https://tomrenner.com/posts/llm-inevitabilism/</link>
      <pubDate>Sat, 12 Jul 2025 00:00:00 +0000</pubDate><author>contact@tomrenner.com (Tom Renner)</author>
      <guid>https://tomrenner.com/posts/llm-inevitabilism/</guid>
      <description>&lt;p&gt;Have you ever argued with someone who is seriously good at debating? I have. It sucks.&lt;/p&gt;&#xA;&lt;p&gt;You&amp;rsquo;re constantly thrown off-balance, responding to a point you didn&amp;rsquo;t expect to. You find yourself defending the weak edges of your argument, while the main thrust gets left behind in the back-and-forth, and you end up losing momentum, confidence, and ultimately, the argument.&lt;/p&gt;&#xA;&lt;p&gt;One of my close friends won international debate competitions for fun while we were at university (he&amp;rsquo;s now a successful criminal barrister), and he told me that the only trick in the book, once you boil it all down, is to make sure the conversation is framed in your terms. Once that happens, it&amp;rsquo;s all over bar the shouting.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;p&gt;Earlier this year I read Professor Shoshana Zuboff&amp;rsquo;s fantastic book &lt;a href=&#34;https://shoshanazuboff.com/book/about/&#34;&gt;The Age of Surveillance Capitalism&lt;/a&gt;. I learned a lot from it (and I&amp;rsquo;m sure I&amp;rsquo;ll rave about it in more detail in other posts), including many new terms for phenomena that have long frustrated me.&lt;/p&gt;&#xA;&lt;p&gt;Being able to put a name to something abstract allows you to more easily build an argument about it, explain the concept to strangers, and unify opposition to it. It&amp;rsquo;s a key success of Professor Zuboff&amp;rsquo;s book that it has introduced so many new terms to the lexicon.&lt;/p&gt;&#xA;&lt;p&gt;The word that is relevant to this post is &amp;ldquo;Inevitabilism&amp;rdquo;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;definition.png&#34; alt=&#34;&#34; title=&#34;Inevitabilism: the belief that certain developments are impossible to avoid&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;People advancing an inevitabilist world view state that the future they perceive will inevitably come to pass. It follows, relatively straightforwardly, that the only sensible way to respond to this is to prepare as best you can for that future.&lt;/p&gt;&#xA;&lt;p&gt;This is a &lt;em&gt;fantastic&lt;/em&gt; framing method. Anyone who sees the future differently to you can be brushed aside as &amp;ldquo;ignoring reality&amp;rdquo;, and the only conversations worth engaging are those that &lt;em&gt;already accept your premise&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;“We are entering a world where we will learn to coexist with AI, not as its masters, but as its collaborators.” – Mark Zuckerberg&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;“AI is the new electricity.” – Andrew Ng&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;“AI will not replace humans, but those who use AI will replace those who don’t.” – Ginni Rometty&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;These are some big names in the tech world, all framing the conversation in a very specific way. Rather than &lt;em&gt;&amp;ldquo;is this the future you want?&amp;rdquo;&lt;/em&gt;, the question is instead &lt;em&gt;&amp;ldquo;how will you adapt to this &lt;strong&gt;inevitable&lt;/strong&gt; future?&amp;rdquo;&lt;/em&gt;. Note also the threatening tone present, a healthy psychological undercurrent encouraging you to go with the flow, because you&amp;rsquo;d otherwise be messing with scary powers way beyond your understanding.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;p&gt;I&amp;rsquo;m not convinced that LLMs are the future. I&amp;rsquo;m certainly not convinced that they&amp;rsquo;re the future I want. But what I&amp;rsquo;m most certain of is that we have choices about what our future should look like, and how we choose to use machines to build it.&lt;/p&gt;&#xA;&lt;p&gt;Don&amp;rsquo;t let inevitabilism frame the argument and take away your choice. Think about the future &lt;strong&gt;you&lt;/strong&gt; want, and fight for it.&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>Saying the quiet part out loud</title>
      <link>https://tomrenner.com/posts/saying-the-quiet-part-out-loud/</link>
      <pubDate>Wed, 02 Aug 2023 00:00:00 +0000</pubDate><author>contact@tomrenner.com (Tom Renner)</author>
      <guid>https://tomrenner.com/posts/saying-the-quiet-part-out-loud/</guid>
      <description>&lt;p&gt;&lt;img src=&#34;tweet.png&#34; alt=&#34;&#34; title=&#34;A tweet from @deathbybadger saying: &amp;quot;have started saying the subtext out loud in conversation eg. &amp;quot;by the way I&#39;m asking for reassurance&amp;quot; or &amp;quot;this look means I want you to put that down so we can talk&amp;quot; and honestly the success rate in getting what I want is much higher&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;“Saying the quiet part out loud” is a phrase I’ve just made up, to describe a method of building alignment on practices within a team. It’s the habit of stating why you are doing things a certain way, even when you would assume it’s obvious.&lt;/p&gt;&#xA;&lt;p&gt;For example:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;“We want to do &lt;em&gt;[obviously moral thing]&lt;/em&gt; because we are not evil”&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;or&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;“We shouldn&amp;rsquo;t leave shitty comments in code reviews because we want to build a positive working environment”.&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;It&amp;rsquo;s easy to assume your colleagues a) know these things and b) would do them without prompting.&lt;/p&gt;&#xA;&lt;p&gt;But it&amp;rsquo;s a form of leadership to state your expectations and beliefs out loud like this. It provides a chance for disagreement and debate by making them public, giving your team the opportunity to challenge your assumptions, or to ask for clarification if their own beliefs don’t align with yours.&lt;/p&gt;&#xA;&lt;p&gt;It takes confidence in your team to offer your priors up to examination in this manner. But also encourages an open and trusting environment, and a culture o&#xA;f honest feedback.&#xA;I&amp;rsquo;ve noticed colleagues I admire doing this, and I’m trying to incorporate it into my working habits as well.&lt;/p&gt;&#xA;&lt;div style=&#34;position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;&#34;&gt;&#xA;      &lt;iframe allow=&#34;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen&#34; loading=&#34;eager&#34; referrerpolicy=&#34;strict-origin-when-cross-origin&#34; src=&#34;https://www.youtube.com/embed/PMHt481HsFU?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0&#34; style=&#34;position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;&#34; title=&#34;YouTube video&#34;&gt;&lt;/iframe&gt;&#xA;    &lt;/div&gt;&#xA;&#xA;</description>
    </item>
    <item>
      <title>Cull your dependencies</title>
      <link>https://tomrenner.com/posts/cull-your-dependencies/</link>
      <pubDate>Thu, 09 Jun 2022 00:00:00 +0000</pubDate><author>contact@tomrenner.com (Tom Renner)</author>
      <guid>https://tomrenner.com/posts/cull-your-dependencies/</guid>
      <description>&lt;p&gt;Anyone  writing code professionally in December 2021 will remember the &lt;a href=&#34;https://www.wired.com/story/log4j-flaw-hacking-internet/&#34;&gt;&amp;ldquo;fun&amp;rdquo;&lt;/a&gt; &lt;a href=&#34;https://www.bbc.com/news/technology-59669297&#34;&gt;of&lt;/a&gt; &lt;a href=&#34;https://www.abc.net.au/news/2021-12-15/log4j-cyber-security-flaw-which-has-online-experts-worried/100703290&#34;&gt;the&lt;/a&gt; &lt;a href=&#34;https://www.wsj.com/articles/hackers-exploit-log4j-flaw-at-belgian-defense-ministry-11640020439?mod=article_inline&#34;&gt;Log4J&lt;/a&gt; &lt;a href=&#34;https://www.computerweekly.com/news/252510860/What-is-Log4Shell-and-why-are-we-panicking-about-it&#34;&gt;vulnerability&lt;/a&gt;. For those that weren&amp;rsquo;t - this was a critical security error that allowed attackers to run any code they wanted on your servers. The root cause was a logging library, Log4J, that is used by most projects that are writting in Java.&lt;/p&gt;&#xA;&lt;p&gt;It&amp;rsquo;s usually used to write code something like:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;code&gt;log.info(&amp;quot;Process completed successfully&amp;quot;);&lt;/code&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;which will then appear in your logs, allowing you to track your application&amp;rsquo;s behaviour. Pretty innocuous stuff.&lt;/p&gt;&#xA;&lt;p&gt;My company was one of the affected by the &lt;a href=&#34;https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-44228&#34;&gt;vulnerability&lt;/a&gt; (among countless others), and in looking into it I noticed something.&lt;/p&gt;&#xA;&lt;h2 id=&#34;by-the-numbers&#34;&gt;By the numbers&lt;/h2&gt;&#xA;&lt;p&gt;The underlying Log4J library is 168,000 lines of code.&lt;/p&gt;&#xA;&lt;p&gt;Now, most commercial applications import tens if not hundreds of such packages, which at a conservative estimate gets us to 1M lines of code in the imported packages. This is roughly the size of an entire &lt;a href=&#34;https://en.wikipedia.org/wiki/Source_lines_of_code#Example&#34;&gt;operating system&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;In &lt;a href=&#34;https://www.oreilly.com/library/view/code-complete-2nd/0735619670/&#34;&gt;Code Complete&lt;/a&gt; Steve McConnell estimates that commercial software has roughly 15-50 errors per thousand lines of code.&lt;/p&gt;&#xA;&lt;p&gt;For our hypothetical application with 1M LoC in its dependences, this suggests we&amp;rsquo;d have around 15,000 bugs in imported code alone. Code that you will likely never see, read, or often even think about.&lt;/p&gt;&#xA;&lt;h2 id=&#34;assumptions-developers-make&#34;&gt;Assumptions developers make&lt;/h2&gt;&#xA;&lt;p&gt;An interesting thing about developers is that we are lazy, and prefer to write as few lines of code as possible, sticking rigidly to the principle of &amp;ldquo;not reinventing the wheel&amp;rdquo;.&lt;/p&gt;&#xA;&lt;p&gt;This encourages us to import packages to solve common problems, rather than write a utility class or method ourselves. However, this habit often results in the addition of thousands of lines to your dependencies, to save writing 20 lines yourself.&lt;/p&gt;&#xA;&lt;p&gt;We also invariably assume that code provided via official means (maven, npm, pip, whatever) will be of higher quality. After all, it&amp;rsquo;s come from the package manager, it&amp;rsquo;s got to be good, right?&lt;/p&gt;&#xA;&lt;p&gt;In reality, packages are often maintained by a single person or a small team of volunteers, and of course in general there are no quality checks required for packages added to package managers. Log4J has been in production  for nearly 20 years, and practically every version of it has contained the critical issue that kept many of us busy patching it in December.&lt;/p&gt;&#xA;&lt;p&gt;Just because it&amp;rsquo;s been available to lots of people and &amp;ldquo;battle tested&amp;rdquo; in production systems  does not mean that it is secure.&lt;/p&gt;&#xA;&lt;p&gt;These two assumptions together cause a poisonous mix whereby developers with the best of intentions end up adding in more and more external code of unknown quality to an application, in the naive pursuit of rapid development and efficient code re-use.&lt;/p&gt;&#xA;&lt;h2 id=&#34;process-problems&#34;&gt;Process problems&lt;/h2&gt;&#xA;&lt;p&gt;Once a package has been added, it becomes part of your &amp;ldquo;assumed standard&amp;rdquo; &amp;ndash; people will assume that using it is safe, and that to do so is best practice, so it will &lt;a href=&#34;https://humanwhocodes.com/blog/2015/05/14/the-bunny-theory-of-code/&#34;&gt;proliferate&lt;/a&gt;. And as usage proliferates, so the dependency will solidify and calcify, and until very rapidly it will prove impossible to remove without a major engineering effort.&lt;/p&gt;&#xA;&lt;p&gt;Minimising dependencies is not something that&amp;rsquo;s (currently) widely valued in our industry, and putting in the refactoring effort to remove a dependency almost never happens (the only exception I&amp;rsquo;ve seen is the removal of Log4J, which is relatively easy to replace, and was only done after a truly massive incident).&lt;/p&gt;&#xA;&lt;p&gt;And so dependencies will only grow over the lifetime of a piece of software, and vulnerabilities will silently accumulate in the application.&lt;/p&gt;&#xA;&lt;p&gt;Additionally, even if you remove a method from being used in code, tooling to remove the package it came from from your project&amp;rsquo;s imports (via pom.xml, package.json, etc.) is pretty poor. It can be hard to determine whether you need a package any more at all, or whether it provides other functionality still used in another corner of the codebase. As a result, stale packages often hang around as bloat even after they&amp;rsquo;re not needed, just waiting to be reintroduced by an unsuspecting developer.&lt;/p&gt;&#xA;&lt;h2 id=&#34;proposals&#34;&gt;Proposals&lt;/h2&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;As a rule, do not add dependencies to your codebase.&lt;/li&gt;&#xA;&lt;li&gt;When a new package is added to the codebase, demand full justifications about why it is required, and record the reason for the addition in a log within the repository. This will both make it easier to remove the dependency later if it is not needed, and also ensure that it continues to be used only for its intended purpose.&lt;/li&gt;&#xA;&lt;li&gt;Don&amp;rsquo;t import multiple packages for &amp;ldquo;utility methods&amp;rdquo; - use one and explicitly agree on using it as a standard within your team. This decision should again be recorded in a dependencies log within the repository.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;I will be following these within my team, and in projects I&amp;rsquo;m involved in.  Do you agree with them? &lt;a href=&#34;https://twitter.com/intent/tweet?text=@TRenner_&amp;amp;url=https%3A%2F%2Fwww.tomrenner.com%2Fblog%2F2022-06-09%2Fcull-your-dependencies&#34;&gt;Let me know&lt;/a&gt; if you do, or if there are other techniques you follow to prevent dependency proliferation in your work.&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>Does the software industry learn?</title>
      <link>https://tomrenner.com/posts/does-the-software-industry-learn/</link>
      <pubDate>Mon, 24 Jan 2022 00:00:00 +0000</pubDate><author>contact@tomrenner.com (Tom Renner)</author>
      <guid>https://tomrenner.com/posts/does-the-software-industry-learn/</guid>
      <description>&lt;p&gt;&amp;ldquo;Institutional knowledge&amp;rdquo; - the information that a company collectively knows - is a familiar concept to anyone involved in hiring processes. When an individual leaves who has knowledge the organisation needs, companies will organise offboarding sessions to keep that knowledge within the institution. Maybe they&amp;rsquo;ll even try to hire someone with similar experience.&lt;/p&gt;&#xA;&lt;p&gt;Lots of companies similarly try to optimise for &amp;ldquo;Institutional learning&amp;rdquo;, especially smaller firms. This makes a lot of sense - smaller companies don&amp;rsquo;t have the resources to buy in extra experience, so they focus on rapidly expanding the experience of their existing employees. It also fits really well with the agile philosophy of fast development cycles to maximise your knowledge about customers&amp;rsquo; needs.&lt;/p&gt;&#xA;&lt;p&gt;But what I would really like to be able to track is &amp;ldquo;Industry knowledge&amp;rdquo;.&lt;/p&gt;&#xA;&lt;p&gt;Software, like a small company, seems very good at learning new things. It&amp;rsquo;s practically the first question developers ask each other; &amp;ldquo;what do you want to learn next?&amp;rdquo;. Everything is New and Shiny and Disruptive. Technologies are king, and the newest is the best.  &lt;em&gt;See: Rust, NFTs, [Bit|Doge|Lite]Coin, etc.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;In keeping up with the latest and greatest, software developers have got very used to learning as a part of their profession. And as that applies to process changes as well, so it seems like &amp;ldquo;Industrial Learning&amp;rdquo; is something Software as a whole does quite well.&lt;/p&gt;&#xA;&lt;p&gt;But what about &amp;ldquo;Industrial Knowledge&amp;rdquo;? As a result of how young the profession is, there are few universally accepted practices and standards. Industrial trends generally come about by replacing the old with the new, not by incremental improvement.&lt;/p&gt;&#xA;&lt;p&gt;In order for learning to most effectively improve our state of operation, it should build on the totality of previous experience, not just the most recent previous state. But I very rarely see articles looking back at past languages or technological fads and looking at current trends through that lens.&lt;/p&gt;&#xA;&lt;p&gt;I want to read content picking apart COBOL and Prolog, analysing them for what they did right and wrong, and telling me how it relates to React and Golang.&lt;/p&gt;&#xA;&lt;p&gt;And, above all, I&amp;rsquo;d really love for that kind of content to be normalised within tech culture. We need more historians and librarians in our ecosystem, and fewer blue-sky thinkers.&lt;/p&gt;&#xA;&lt;p&gt;After all, if I remember rightly, that those who fail to learn from history are likely to be worse at stuff.&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>Should we welcome or fear the Metaverse?</title>
      <link>https://tomrenner.com/posts/should-we-welcome-or-fear-the-metaverse/</link>
      <pubDate>Thu, 04 Nov 2021 00:00:00 +0000</pubDate><author>contact@tomrenner.com (Tom Renner)</author>
      <guid>https://tomrenner.com/posts/should-we-welcome-or-fear-the-metaverse/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;em&gt;Kit Wilson writes in The Spectator about Facebook’s new venture into the Metaverse, a concept that most of us probably hadn’t heard of until last week. To layout the roadmap for what our journey into this new digital reality might look like, Kit joins the podcast along with Tom Renner, a software engineer for NavVis. (12:55)&lt;/em&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;style&gt;&#xA;  .iframe-container {&#xA;    position: relative;&#xA;    overflow: hidden;&#xA;    width: 100%;&#xA;    padding-top: 100%;&#xA;  }&#xA;&#xA;  .responsive-iframe {&#xA;    position: absolute;&#xA;    top: 0;&#xA;    left: 0;&#xA;    bottom: 0;&#xA;    right: 0;&#xA;    width: 100%;&#xA;    height: 95;&#xA;    display: block;&#xA;    background-color: transparent;&#xA;  }&#xA;&lt;/style&gt;&#xA;&#xA;&lt;div class=&#34;iframe-container&#34;&gt;&#xA;  &lt;iframe class=&#34;responsive-iframe&#34; src=&#39;https://embeds.audioboom.com/posts/7974013/embed?v=202301&#39;&gt;&lt;/iframe&gt;&#xA;&lt;/div&gt;&#xA;&#xA;</description>
    </item>
    <item>
      <title>DORA? I barely know her!</title>
      <link>https://tomrenner.com/posts/dora-i-barely-know-her/</link>
      <pubDate>Wed, 28 Apr 2021 00:00:00 +0000</pubDate><author>contact@tomrenner.com (Tom Renner)</author>
      <guid>https://tomrenner.com/posts/dora-i-barely-know-her/</guid>
      <description>&lt;h2 id=&#34;coming-to-grips-with-devops-metrics&#34;&gt;Coming to grips with DevOps metrics&lt;/h2&gt;&#xA;&lt;p&gt;In my team we have been considering ways to monitor our own performance, and finding some ways to contextualise our ongoing process and quality improvements. Like many other teams, we&amp;rsquo;ve landed on the &lt;a href=&#34;https://www.blueoptima.com/blog/how-to-measure-devops-success-why-dora-metrics-are-important&#34;&gt;DORA metrics&lt;/a&gt; as a good way of doing this.  These four key metrics are an easy way to understand what adjectives like &amp;ldquo;maintainable&amp;rdquo;, &amp;ldquo;reliable&amp;rdquo;, and &amp;ldquo;efficient&amp;rdquo; mean in practice when applied to software and teams, and the provide a way of comparing team performance across teams and over time.&lt;/p&gt;&#xA;&lt;p&gt;To just get a basic idea of how your team is doing, &lt;a href=&#34;https://www.devops-research.com/quickcheck.html&#34;&gt;this quiz&lt;/a&gt; will give you a rough outline. But (if you&amp;rsquo;re like me at least) you&amp;rsquo;re going to want to dig in deeper.&lt;/p&gt;&#xA;&lt;p&gt;Personally I want to enable my team to have ongoing visibility of our progress, using automated data extraction from our existing tools to enable live observation of the DORA metrics, so we can track how time invested in process experiments, addressing technical debt, and infrastructure work feeds back into the overall quality of our end product.&lt;/p&gt;&#xA;&lt;p&gt;And this got me thinking. The DORA metrics are intentionally defined as &amp;ldquo;second-order&amp;rdquo; data - that is, they cannot be observed in themselves. They are each derived from raw, &amp;ldquo;first-order&amp;rdquo; data points we can extract from our tooling and codebase.&lt;/p&gt;&#xA;&lt;p&gt;Depending on your tool chain there might be a tool out there that &lt;a href=&#34;https://cloud.google.com/blog/products/devops-sre/another-way-to-gauge-your-devops-performance-according-to-dora&#34;&gt;tracks these metrics for you&lt;/a&gt;. However, everyone&amp;rsquo;s stack is different, and I wanted to explore what would be required to do this for ourselves, rather than forking out for a third party tool.&lt;/p&gt;&#xA;&lt;p&gt;So for each DORA metric, what are the practical steps we need to take to get these &amp;ldquo;first-order&amp;rdquo; data from our existing tooling?&lt;/p&gt;&#xA;&lt;h2 id=&#34;1-deployment-frequency&#34;&gt;1. Deployment frequency&lt;/h2&gt;&#xA;&lt;h3 id=&#34;raw-data&#34;&gt;Raw data:&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Datestamp for each deployment&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;This is the easiest metric to track. To extract the raw data it should be trivial to either tag the deployed commit in Git, or use your CI tool to otherwise report the deployment datestamp.&lt;/p&gt;&#xA;&lt;p&gt;One thing to note is that &lt;a href=&#34;https://charity.wtf/2019/05/01/friday-deploy-freezes-are-exactly-like-murdering-puppies/&#34;&gt;&amp;ldquo;Release != Deploy&amp;rdquo;&lt;/a&gt;. &amp;ldquo;Deploying&amp;rdquo; here means the act of getting your code into production. Code may still be unused, for example if they&amp;rsquo;re hidden behind feature flags, but it&amp;rsquo;s the actual deploying we&amp;rsquo;re trying to track here.&lt;/p&gt;&#xA;&lt;h2 id=&#34;2-mean-time-to-deployment&#34;&gt;2. Mean time to deployment&lt;/h2&gt;&#xA;&lt;h3 id=&#34;raw-data-1&#34;&gt;Raw data:&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Datestamp for each deployment&lt;/li&gt;&#xA;&lt;li&gt;List of features included in each deployment&lt;/li&gt;&#xA;&lt;li&gt;Start date for development of each feature&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;This metric tracks the life-cycle of a feature - how long it took from picking it up to it being deployed - and the first-order data is a little more complex to track.  My go-to plan for tracking deployment of features is to use my Git history to do the legwork for me.&lt;/p&gt;&#xA;&lt;p&gt;To track a feature through development to deployment we&amp;rsquo;ll need to label our commits in some way - either through Git tags or a structured label easily extracted from the commit message, probably - and tag our releases with the features they include.&lt;/p&gt;&#xA;&lt;p&gt;For my team this is easiest to do by labelling commit messages with the ID of the story we&amp;rsquo;re working on, and using Git tags to mark releases. By scanning the history we can then automatically extract the story IDs added since our previous release tag. In the same scan we can also find the first commit that includes that ID, and use that as an approximation for when development started on that feature.&lt;/p&gt;&#xA;&lt;h2 id=&#34;3-change-failure-rate&#34;&gt;3. Change failure rate&lt;/h2&gt;&#xA;&lt;h3 id=&#34;raw-data-2&#34;&gt;Raw data:&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;When a failure happens&lt;/li&gt;&#xA;&lt;li&gt;Which deployment caused that failure&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Here we will need some manual intervention, since identifying the cause of a failure is almost always going to require a human to do the investigation work. I also think there&amp;rsquo;s an interesting discussion to be had with your team about what constitutes a &amp;ldquo;failure&amp;rdquo; that you&amp;rsquo;ll want to track in this way. Depending on your context this could include e.g. UX failures, as well as the more obvious &amp;ldquo;everything throws exceptions&amp;rdquo; failure mode.&lt;/p&gt;&#xA;&lt;p&gt;A basic setup that I would start with is to define anything that makes it to your bug-tracking system (either automatically via monitoring, or manually via user reports) as a failure. As part of the resolution of that bug your team should then tag the issue with the release that introduced it. Exporting data from your ticketing system will then allow you to find the failure rate we&amp;rsquo;re looking to track.&lt;/p&gt;&#xA;&lt;h2 id=&#34;4-time-to-restore-service&#34;&gt;4. Time to restore service&lt;/h2&gt;&#xA;&lt;h3 id=&#34;raw-data-3&#34;&gt;Raw data:&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;What time the service failure started&lt;/li&gt;&#xA;&lt;li&gt;What time service was restored in production&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;These metrics should be available from your monitoring system.&lt;/p&gt;&#xA;&lt;h2 id=&#34;conclusions&#34;&gt;Conclusions&lt;/h2&gt;&#xA;&lt;p&gt;Looking at each of the first-order data elements required, for a first pass implementation of this we&amp;rsquo;ll need to get data from our:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Version control system&lt;/li&gt;&#xA;&lt;li&gt;Bug-tracking/ticketing system&lt;/li&gt;&#xA;&lt;li&gt;Monitoring system&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;which in our case means: Git, Jira, and Sentry. This is fewer systems than I had expected, but it still wont be trivial to extract the data we need reliably and automatically.&lt;/p&gt;&#xA;&lt;p&gt;On that note: we&amp;rsquo;ll certainly need the data extraction to be automatic, to avoid having adding overhead to the team&amp;rsquo;s day-to-day or getting in the way of critical tasks. It would be hard to justify manually noting down timestamps of failures when production goes down.&lt;/p&gt;&#xA;&lt;p&gt;There are also several terms that we&amp;rsquo;ll want to discuss to define clearly up front. The meaning of terms like &amp;ldquo;failure&amp;rdquo;, &amp;ldquo;deployment&amp;rdquo;, and even &amp;ldquo;feature&amp;rdquo; are going to be contextual to your team&amp;rsquo;s way of working and problem domain. Without taking the time to agree clear definitions of these ahead of time would make the data analysis planned later pretty meaningless, and will kill dead any buy-in you want from the rest of your team.&lt;/p&gt;&#xA;&lt;p&gt;I hope you found this helpful! As I&amp;rsquo;m sure you can tell I&amp;rsquo;m still exploring this topic, so do &lt;a href=&#34;https://tomrenner.com/contact&#34;&gt;get in touch&lt;/a&gt; if you think I&amp;rsquo;ve got something wrong, or if your team tracks these metrics in a more simple or effective way.&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>Staying in one place doesn&#39;t mean standing still</title>
      <link>https://tomrenner.com/posts/staying-in-one-place-doesnt-mean-standing-still/</link>
      <pubDate>Sat, 13 Mar 2021 00:00:00 +0000</pubDate><author>contact@tomrenner.com (Tom Renner)</author>
      <guid>https://tomrenner.com/posts/staying-in-one-place-doesnt-mean-standing-still/</guid>
      <description>&lt;div style=&#34;position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;&#34;&gt;&#xA;      &lt;iframe allow=&#34;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen&#34; loading=&#34;eager&#34; referrerpolicy=&#34;strict-origin-when-cross-origin&#34; src=&#34;https://www.youtube.com/embed/o-PO_-sm_gA?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0&#34; style=&#34;position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;&#34; title=&#34;YouTube video&#34;&gt;&lt;/iframe&gt;&#xA;    &lt;/div&gt;&#xA;&#xA;&lt;p&gt;&lt;em&gt;Talk given at &lt;a href=&#34;https://codebar.io/events/codebar-festival-2021-day-2&#34;&gt;Codebar Festival&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;If you wish to see my slides in their full glory, they are available &lt;a href=&#34;https://www.slideshare.net/TomRenner3/staying-in-one-place-doesnt-mean-standing-still-249738132&#34;&gt;on Slideshare&lt;/a&gt;&lt;/em&gt;.&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>Make yourself a happy place in your inbox - a mindfulness tip for your working day</title>
      <link>https://tomrenner.com/posts/make-yourself-a-happy-place/</link>
      <pubDate>Wed, 03 Feb 2021 00:00:00 +0000</pubDate><author>contact@tomrenner.com (Tom Renner)</author>
      <guid>https://tomrenner.com/posts/make-yourself-a-happy-place/</guid>
      <description>&lt;p&gt;Your work inbox is probably not a place that sparks joy. It&amp;rsquo;s full of people asking you to do things, complaints that something hasn&amp;rsquo;t been done, and 571 messages marked urgent.&lt;/p&gt;&#xA;&lt;p&gt;In fact email is usually considered to be a hindrance, with many productivity guides recommending simply ignoring your email for large periods of the day, blocking out that time for focussed work. The consensus is that your work inbox is just a place that generates distractions, and contains never-ending to-do lists that nag away at you throughout the day.&lt;/p&gt;&#xA;&lt;p&gt;But my inbox has a secret.&lt;/p&gt;&#xA;&lt;p&gt;My inbox holds my office &lt;strong&gt;happy place&lt;/strong&gt;. A cool oasis of positivity among the desert of client demands, deadlines, and review requests.&lt;/p&gt;&#xA;&lt;p&gt;My happy place is so simple anyone can recreate it, and over several years has brought me joy when I&amp;rsquo;m feeling strong and support when I&amp;rsquo;m low.&lt;/p&gt;&#xA;&lt;p&gt;This DIY mindfulness practice is an inbox folder called &amp;ldquo;Nice :-)&amp;rdquo;, into which I sort all the emails I receive containing praise, thanks, or positivity - anything that makes me happy when I read it. It honestly is that simple, but this small thing has helped me through many tough days.&lt;/p&gt;&#xA;&lt;p&gt;So often at work success can feel fleeting. Once something has been solved we move on to the next problem, with little time to bask in the glory of a job well done. But those successes still count, and should be remembered.&lt;/p&gt;&#xA;&lt;p&gt;In the rush of the working day it&amp;rsquo;s so easy to focus on the the continual stream of requests for your time, and forget that your responses are really appreciated. Keeping hold of those one-line emails that say &lt;em&gt;&amp;ldquo;Thanks, this is great!&amp;rdquo;&lt;/em&gt; helps me remember that work isn&amp;rsquo;t just about getting through the day. Our work and the time spent on it is valuable, and makes a huge difference to our colleagues&amp;rsquo; and users&amp;rsquo; lives.&lt;/p&gt;&#xA;&lt;p&gt;Having this space to record personal successes has really helped my mental well-being over the years, building up an arsenal of evidence to counteract those negative voices in my head when things aren&amp;rsquo;t going so well. I&amp;rsquo;d recommend this trivial technique to everyone, as a super simple way to make yourself a little happy place that&amp;rsquo;s open for visitors any time you need.&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>Twitter network graphing with Gephi</title>
      <link>https://tomrenner.com/posts/twitter-graphing-with-gephi/</link>
      <pubDate>Mon, 20 Apr 2020 00:00:00 +0000</pubDate><author>contact@tomrenner.com (Tom Renner)</author>
      <guid>https://tomrenner.com/posts/twitter-graphing-with-gephi/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;Unfortunately since Elon shut down the Twitter APIs, the below method no longer works. Still, it was fun while it lasted, eh?&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Gephi is a piece of software for visualising graph networks. It&amp;rsquo;s a powerful tool, and to use it fully requires significant domain knowledge that I don&amp;rsquo;t possess, but fortunately it&amp;rsquo;s still fascinating to play around with as an amateur!&lt;/p&gt;&#xA;&lt;p&gt;As a techie, to me the obvious networks to graph are those created by the big Social Networks - YouTube, Facebook, etc. It&amp;rsquo;s not hugely surprising to find that mostly these graphs mostly aren&amp;rsquo;t available for querying, but excitingly there is a plugin that allows you to stream in live data from Twitter.&lt;/p&gt;&#xA;&lt;p&gt;I&amp;rsquo;m very much a beginner, but I produced the network image below looking at Twitter activity around the word &amp;ldquo;Trump&amp;rdquo; (as an easy example of a query that produces a fair amount of activity at the moment), which I&amp;rsquo;m really pleased with.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;TrumpIllustrated.png&#34; alt=&#34;&#34; title=&#34;Network graph of Twitter activity around the word &amp;quot;Trump&amp;quot;&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;In the above you can see different kinds of activity linked by their interactions, colour-coded by type (user, tweet, hashtag, etc.) and scaled by the number of interactions they had in the time period the data was collected over.&lt;/p&gt;&#xA;&lt;p&gt;I think graphing in this way is super cool, but I couldn&amp;rsquo;t find a quick-start guide online for how get set up and producing graphs that are interesting to investigate, so I wrote myself a how-to as I went. It&amp;rsquo;s very basic, but got me to the point where the more detailed documentation online started to make sense.&lt;/p&gt;&#xA;&lt;p&gt;So without further ado, here&amp;rsquo;s my beginners step-by-step guide for producing this kind of graph. I&amp;rsquo;ve added in bullet points of the settings I used to produce the image above, in case you want to follow along.&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Download &lt;a href=&#34;https://gephi.org&#34;&gt;Gephi&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Install &lt;a href=&#34;https://seinecle.github.io/gephi-tutorials/generated-html/twitter-streaming-importer-en.html&#34;&gt;TwitterStreamer&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;Follow the tutorial on the &lt;a href=&#34;https://seinecle.github.io/gephi-tutorials/generated-html/twitter-streaming-importer-en.html&#34;&gt;TwitterStreamer installation page&lt;/a&gt; to set up a Twitter developer app and connect it to the plugin&lt;/li&gt;&#xA;&lt;li&gt;Stream in data from a Twitter search query, stopping streaming when you have a reasonable amount of data&#xA;&lt;ul&gt;&#xA;&lt;li&gt;5-10k nodes is about right&lt;/li&gt;&#xA;&lt;li&gt;I streamed a text search for the word &amp;ldquo;trump&amp;rdquo;, as an initial query that would produce data quickly&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Set a layout in the panel on the left so that your nodes don&amp;rsquo;t just appear randomly distributed across the canvas&#xA;&lt;ul&gt;&#xA;&lt;li&gt;ForceAtlas 2: Prevent overlap, Scaling 1.5, Gravity 1.2&lt;/li&gt;&#xA;&lt;li&gt;Note: Changes to a layout take time to apply, and can be interrupted any time by selecting &amp;ldquo;Stop&amp;rdquo; in the layout panel.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Resize nodes in the &amp;ldquo;Appearance&amp;rdquo; panel - scaling them by degree is a good starting point&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Note: If you stopped the layout (ForceAtlas 2, if you&amp;rsquo;re following along), you&amp;rsquo;ll want to restart it here so the newly resized nodes don&amp;rsquo;t overlap&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Select the labels you&amp;rsquo;d like to display&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Toggle label visibility, by selecting the &amp;ldquo;T&amp;rdquo; symbol at the bottom of the graph view&lt;/li&gt;&#xA;&lt;li&gt;On the &amp;ldquo;Data Laboratory&amp;rdquo; panel (in a tab at the top of the screen), select all nodes with Ctrl+A, and deselect &amp;ldquo;show label&amp;rdquo;&lt;/li&gt;&#xA;&lt;li&gt;Back on the &amp;ldquo;Overview&amp;rdquo; panel, select individual nodes of interest, right-click to &amp;ldquo;Select in data laboratory&amp;rdquo;. Switch tabs and select &amp;ldquo;show label&amp;rdquo; on that data point.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Set some image settings for export along the bottom of the graph canvas&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Set black background, using the light bulb symbol&lt;/li&gt;&#xA;&lt;li&gt;Set the text colour to &amp;ldquo;unique&amp;rdquo;, using the &amp;ldquo;A&amp;rdquo; button&lt;/li&gt;&#xA;&lt;li&gt;Edge weight to full, using the slider&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;There are &lt;em&gt;loads&lt;/em&gt; more options to play around with, layouts, filters, and on and on. I&amp;rsquo;m looking forward to getting thoroughly lost in menus.&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>XTC discusses Basecamp&#39;s Shape-Up</title>
      <link>https://tomrenner.com/posts/xtc-basecamp-shape-up/</link>
      <pubDate>Sat, 22 Feb 2020 00:00:00 +0000</pubDate><author>contact@tomrenner.com (Tom Renner)</author>
      <guid>https://tomrenner.com/posts/xtc-basecamp-shape-up/</guid>
      <description>&lt;p&gt;Last week I facilitated a session at &lt;a href=&#34;https://www.meetup.com/eXtreme-Tuesday-Club-XTC/&#34;&gt;XTC&lt;/a&gt;, where we discussed the new product development framework from Basecamp, &lt;a href=&#34;https://basecamp.com/shapeup&#34;&gt;Shape Up&lt;/a&gt;, led by &lt;a href=&#34;https://twitter.com/thomasankcorn&#34;&gt;Thomas Ankorn&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;It was a really interesting discussion with people exploring the ideas openly, guided by questions posed by Thomas to get the conversation started.&lt;/p&gt;&#xA;&lt;p&gt;I&amp;rsquo;ve summarised the points that came up in the discussion, reconstructed from memory and the collected post-its of scribbles at the end of the evening.&lt;/p&gt;&#xA;&lt;h3 id=&#34;1-what-problems-does-this-solve&#34;&gt;1. What problems does this solve?&lt;/h3&gt;&#xA;&lt;p&gt;We started by looking at the positives of the framework, trying to identify strengths that would help mitigate problems we have encountered in our own teams.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The development team takes responsibility for and ownership of the work they&amp;rsquo;re doing&lt;/li&gt;&#xA;&lt;li&gt;It encourages a high level of trust between teams - shapers to produce workable specs, and makers to take those and implement them with fewer interventions and less supervision&lt;/li&gt;&#xA;&lt;li&gt;Removing the backlog concept stops it from becoming an &amp;ldquo;ever-growing TODO list&amp;rdquo;&lt;/li&gt;&#xA;&lt;li&gt;&amp;ldquo;Betting&amp;rdquo; on development tasks gets everyone used to the idea that some won&amp;rsquo;t pay off, which would aid communication with non-technical parts of the company&lt;/li&gt;&#xA;&lt;li&gt;Describing the specification process as &amp;ldquo;shaping&amp;rdquo; reduces the chance of over-specification&lt;/li&gt;&#xA;&lt;li&gt;&amp;ldquo;Betting&amp;rdquo; encourages shaped specifications to be finished in the eyes of the development team, as otherwise people will be less likely to bet on them&lt;/li&gt;&#xA;&lt;li&gt;Minimises the amount of time spent lost to communication overhead - less frequent ceremonies leaves more time for work&lt;/li&gt;&#xA;&lt;li&gt;&amp;ldquo;Fat pen&amp;rdquo; design again prevents over-specification of the UI&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;2-what-do-people-see-as-red-flags&#34;&gt;2. What do people see as red flags?&lt;/h3&gt;&#xA;&lt;p&gt;As is slightly inevitable in a group discussion of this kind, &amp;ldquo;red flags&amp;rdquo; was slightly watered down to &amp;ldquo;generic problems&amp;rdquo; when discussed around the table.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;The scope is fixed for a period of work - each development task has to fit into 6 weeks, so features that would take longer than this aren&amp;rsquo;t possible&lt;/li&gt;&#xA;&lt;li&gt;People interrupting to ask questions is likely, since the teams are split and the development period is quite long&lt;/li&gt;&#xA;&lt;li&gt;&amp;ldquo;Circuit breaker&amp;rdquo; concept could be really demoralising for the developer, to see their work thrown away&lt;/li&gt;&#xA;&lt;li&gt;Very much based around product development and expansion - would it work for projects in maintenance phase?&lt;/li&gt;&#xA;&lt;li&gt;Longer cycles slows down your feedback loop, which is opposite to what most teams want&lt;/li&gt;&#xA;&lt;li&gt;No information about how often work spills over into the &amp;ldquo;cool-off&amp;rdquo; period, which would be interesting to know. Too much of this would harm clean-up tasks&lt;/li&gt;&#xA;&lt;li&gt;Divides the team into &amp;ldquo;shapers&amp;rdquo; vs &amp;ldquo;makers&amp;rdquo;, making a two-stream system&lt;/li&gt;&#xA;&lt;li&gt;Leaves a &lt;strong&gt;lot&lt;/strong&gt; of time for shaping - is that really needed?&lt;/li&gt;&#xA;&lt;li&gt;The &amp;ldquo;cool-off&amp;rdquo; period seams to make clean-up and refactoring separate tasks, not part of everyone&amp;rsquo;s day to day work&lt;/li&gt;&#xA;&lt;li&gt;Asymmetry in the team - seems like the development team might not have a say over what is available for betting or what they can say no to&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;3-is-there-anything-youll-take-away-and-try&#34;&gt;3. Is there anything you&amp;rsquo;ll take away and try?&lt;/h3&gt;&#xA;&lt;p&gt;Many people agreed at this stage that they would like to apply some of the specific techniques proposed as part of the framework. Nobody was ready yet to take the plunge and try to implement the full methodology, but that was probably unlikely as an outcome of a single group discussion!&lt;/p&gt;&#xA;&lt;p&gt;The common elements that people mentioned they would like to try out in their workplaces were:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&amp;ldquo;Fat pen&amp;rdquo; design, to replace wireframing&lt;/li&gt;&#xA;&lt;li&gt;Using the &amp;ldquo;betting&amp;rdquo; and &amp;ldquo;shaping&amp;rdquo; terms to better describe the aims and intentions of development and specification tasks&lt;/li&gt;&#xA;&lt;li&gt;Attempting to minimise the communication overhead of the Agile ceremonies&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;hr&gt;&#xA;&lt;p&gt;This was a really fun discussion to be a part of. Challenging the group to re-examine and justify their working practices threw up plenty of common issues working with the Agile methodology, and discussing how Shape Up works was a great lens to prompt ideas about how to improve our processes.&lt;/p&gt;&#xA;&lt;p&gt;It&amp;rsquo;s always going to be easier to pick holes in a new set of processes, especially when Agile is so widely used, but it was clear from the discussion that there were definitely ideas that people really liked in Shape Up. I&amp;rsquo;ll certainly be keeping an eye out for whether it is picked up more widely, and whether the issues we identified at XTC are evident when the methodology is used in practice.&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>The Temple of Fail</title>
      <link>https://tomrenner.com/posts/temple-of-fail/</link>
      <pubDate>Mon, 25 Nov 2019 00:00:00 +0000</pubDate><author>contact@tomrenner.com (Tom Renner)</author>
      <guid>https://tomrenner.com/posts/temple-of-fail/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;DISCLAIMER:&lt;/strong&gt; &lt;em&gt;This was not my idea - I picked it up from Jane Nicholson at an &lt;a href=&#34;https://www.meetup.com/eXtreme-Tuesday-Club-XTC/&#34;&gt;XTC&lt;/a&gt; event, who was introduced to it by Jess Gilbert (who in turn, I am told, got it from someone else). This post is just explaining why I believe it can be a useful exercise, not any truly original thinking!&lt;/em&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;One of the things that is really important to me is that my team and I keep learning at work. As such, fostering a learning environment is kinda key. I think we do that pretty well at Haplo &amp;ndash; we have hired nearly exclusively early-career developers to our tech team for several years now, and one of the key points most hires mention as to why they join is that they feel it&amp;rsquo;s a good place to learn quickly, with the requisite support early on in their career.&lt;/p&gt;&#xA;&lt;p&gt;One of the regular things we do to foster learning from our mistakes, and an open environment of sharing, is the &amp;ldquo;Temple of Fail&amp;rdquo;.&lt;/p&gt;&#xA;&lt;h3 id=&#34;how-this-works&#34;&gt;How this works:&lt;/h3&gt;&#xA;&lt;p&gt;Every week in our retro (which we call &amp;ldquo;demo day&amp;rdquo;, but that&amp;rsquo;s a different story) we have a regular section called the &amp;ldquo;Temple of Fail&amp;rdquo;. This time is reserved for everyone to bring to the table an example of a mistake they made this week. This failure can be as small and silly or as large and catastrophic as you want, but we do encourage everyone to bring one to the table each week.&lt;/p&gt;&#xA;&lt;p&gt;The intention then is to share that mistake with the team, so others can learn from it. We have a quick discussion on how to avoid doing that in the future, and that way we hope that only one member of the team will make each mistake as a result!&lt;/p&gt;&#xA;&lt;p&gt;Of course this can be a pretty intimidating thing to do, especially early on in your career (literally day 2 in some cases). Team leads asking you to turn up to a group meeting and tell them what you fucked up this week in front of everything is kinda terrifying. As a result, we try to make the &amp;ldquo;ceremony&amp;rdquo; around this session as light-hearted as possible.&lt;/p&gt;&#xA;&lt;p&gt;For example, when introducing the session I&amp;rsquo;ll say something like &amp;ldquo;we, the devotees of our Lady the Goddess of Failure, have this week&amp;hellip;&amp;rdquo; or something similarly ridiculous. The intention is to make it as low-blame and light-hearted as possible, to minimise any tension around the table.&lt;/p&gt;&#xA;&lt;p&gt;This has to go hand in hand with a no-blame attitude to mistakes, where you want to fix the process, not the person, when something goes wrong. I&amp;rsquo;m lucky enough to work somewhere where our directors have worked very hard to foster a supportive and learning environment, which is really what enables this to work.&lt;/p&gt;&#xA;&lt;p&gt;Of course people do repeat mistakes, but this for me is one of the most valuable things that we do as a team. Not everyone has something to share each week, but being able to minimise the number of mistakes that are repeated across the team is incredibly valuable.&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>&#34;Efficiency&#34; is bad for your health, and your learning</title>
      <link>https://tomrenner.com/posts/efficiency-is-bad-for-your-health/</link>
      <pubDate>Mon, 10 Jun 2019 00:00:00 +0000</pubDate><author>contact@tomrenner.com (Tom Renner)</author>
      <guid>https://tomrenner.com/posts/efficiency-is-bad-for-your-health/</guid>
      <description>&lt;p&gt;I used to stress a lot about the &amp;ldquo;efficiency&amp;rdquo; of how I was using up all the minutes in my day. I&amp;rsquo;d to cram in as much as possible into time. eg. read on a 10 minute train, write code in the half hour before bed, etc.&lt;/p&gt;&#xA;&lt;p&gt;While I stressed about it a lot, I never found that I did the &amp;ldquo;10x&amp;rdquo; things I read about that were supposed to emerge as a result of this extra &amp;ldquo;efficiency&amp;rdquo;. For example I have only finished one of the three side projects I started in 2016, despite promising myself that those wouldn&amp;rsquo;t take long.&lt;/p&gt;&#xA;&lt;p&gt;Having worked professionally now for coming up to 5 years my attitude to this has changed a lot. I&amp;rsquo;ve been lucky to have found a job I enjoy in a workplace that actively encourages a healthy attitude to work life balance. I don&amp;rsquo;t have the energy to beat myself up about 20 minutes three times a week. TBH my brain has enough stress worrying about the big things to be concerned about these little ones.&lt;/p&gt;&#xA;&lt;p&gt;It&amp;rsquo;s not feasible for a Real Life Human(TM) to be &amp;ldquo;totally efficient&amp;rdquo; with their time, using it all for either productivity or the subset of leisure activities that I internally think &amp;ldquo;count&amp;rdquo;, in this bizarro time-economy.&lt;/p&gt;&#xA;&lt;p&gt;Nearly all personal development for professional related skills happens in your job. That&amp;rsquo;s always likely to be the case just because of the number of hours you spend at your desk (unless you&amp;rsquo;re in a job that doesn&amp;rsquo;t challenge you at all, in which case you have a different problem).&lt;/p&gt;&#xA;&lt;p&gt;I&amp;rsquo;ve found myself to be much happier to only do extra things when I&amp;rsquo;m really interested, rather than see it as a &amp;ldquo;must do&amp;rdquo; just to keep up. Given that tech is already an industry that tends to promote working stupid hours at the cost of your mental health, and the marginal skills gains from all this side-hustling are pretty crap, as far as I can tell you&amp;rsquo;re better served not stressing all the little things in the name of productivity.&lt;/p&gt;&#xA;&lt;p&gt;And if you give yourself this little bit more leeway, you&amp;rsquo;ll have more energy to spend really focussing on the things you &lt;em&gt;do&lt;/em&gt; do, so you&amp;rsquo;ll probably learn more from them anyway.&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>Offline knowledge, buses, and note-taking</title>
      <link>https://tomrenner.com/posts/offline-knowledge/</link>
      <pubDate>Sun, 19 May 2019 00:00:00 +0000</pubDate><author>contact@tomrenner.com (Tom Renner)</author>
      <guid>https://tomrenner.com/posts/offline-knowledge/</guid>
      <description>&lt;p&gt;In a team having knowledge that lives only in your head is a terrible thing.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Humans are forgetful&lt;/li&gt;&#xA;&lt;li&gt;Humans are creative, especially when problem-solving&lt;/li&gt;&#xA;&lt;li&gt;Computers are not creative&lt;/li&gt;&#xA;&lt;li&gt;Computers are not forgetful&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;So we should get the computers to remember things, and allow the humans to do the creative parts.&lt;/p&gt;&#xA;&lt;p&gt;Writing software is a creative activity. You start with a blank text file and end up convincing people to give you their identity details in exchange for the ability to poke someone over Facebook. If that&amp;rsquo;s not creative I don&amp;rsquo;t know what is.&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&amp;ldquo;The programmer, like the poet, works only slightly removed from pure thought-stuff. He builds his castles in the air, from air, creating by exertion of the imagination.&amp;rdquo; &amp;ndash; &lt;em&gt;Fred Brookes, The Mythical Man-Month&lt;/em&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;However, not only are humans forgetful, but having just a single person who knows how to do a thing is a huge risk. Some of you may know this concept as your project&amp;rsquo;s &amp;ldquo;bus factor&amp;rdquo; &amp;ndash; how many people would have to get hit by a bus for your project to fall over. To make sure your project is resilient to buses (and more mundane problems, like forgetfulness) you need to make sure lots of people can do any given task - i.e. get information out of your head.&lt;/p&gt;&#xA;&lt;p&gt;Knowing that brains are a bad storage place for reference information is not a new idea. This is the basic idea behind documentation. But before you can have effective documentation, first you need to have a place to put those things. A scheme for encouraging documentation.&lt;/p&gt;&#xA;&lt;p&gt;I&amp;rsquo;m not going to talk about technical documentation here, for a couple of reasons. Firstly, I&amp;rsquo;m not qualified, given I don&amp;rsquo;t think I document very well (apologies to my team mates), but also because the &lt;em&gt;practice&lt;/em&gt; of documenting isn&amp;rsquo;t that complex, in my opinion. You just need to make time to do it.&lt;/p&gt;&#xA;&lt;p&gt;The thing that&amp;rsquo;s been interesting me recently is how to manage your personal documentation - keeping track of your upcoming work and staying on top of it, while maintaining enough headspace to stay focussed on your current problem.&lt;/p&gt;&#xA;&lt;p&gt;One of the best ways of improving your productivity is to stop yourself thinking &lt;em&gt;of&lt;/em&gt; things you have to do, and allow yourself to think &lt;em&gt;how to do them&lt;/em&gt;. This is only possible if you have systems to do your remembering for you, giving you the space to do the creative problem solving part.&lt;/p&gt;&#xA;&lt;p&gt;The key thing that needs to happen to allow you to do that is to get things out of your head and into your system. Your system can be digital, notebook based, post-it based, whatever. How you actually record things doesn&amp;rsquo;t matter, but there are a few key characteristics I think are important for your system to work well:&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;1. You need to be able to know where to look next&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;For it to be effective, it must be clear what your immediate priorities are. As in 10 minutes to an hour immediate. Looking at it should tell you precisely and accurately what your next task should be, with enough detail that you could go away and find further context for the task if necessary.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;2. You need to be able to add all incoming tasks to it&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Working life adds tasks to your inbox all the time. These will not come at convenient moments when you can think about when in your next week you&amp;rsquo;ll be able to do it. Taking the time to schedule and prioritise every incoming task will kill all momentum on your current task. Your system therefore needs to allow you to quickly (in under 10 seconds) add any incoming task to an appropriate place that you can guarantee you will pick it up later, and in time that you won&amp;rsquo;t miss any associated deadline.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;3. It must be always available&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;There is no use in a system that you only have to hand 70% of the time, as it will only capture &lt;em&gt;at most&lt;/em&gt; 70% of the things you want to track. This will leave you trying to think of things again, rather than about them. Or, just as bad, you will come up with potentially multiple other places to record tasks, making &lt;em&gt;all&lt;/em&gt; your lists ineffective at helping you decide what to do next.&lt;/p&gt;&#xA;&lt;p&gt;What I have found wonderful is that these principles apply equally well to both personal organisational lists and shared ones, working as part of a team. Different methods of applying them work better for each environment (my phone is a bad place for shared work priorities to live, for example), but applying the principles helps me with prioritisation and decision problems wherever I have them.&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>Setting up a bottom-end Chromebook for development</title>
      <link>https://tomrenner.com/posts/setting-up-chromebook/</link>
      <pubDate>Thu, 28 Mar 2019 00:00:00 +0000</pubDate><author>contact@tomrenner.com (Tom Renner)</author>
      <guid>https://tomrenner.com/posts/setting-up-chromebook/</guid>
      <description>&lt;p&gt;I like being able to code wherever I am. &lt;em&gt;&amp;ldquo;Unfortunately&amp;rdquo;&lt;/em&gt;, my 15&amp;quot; laptop bought to run simulations for my degree still runs like a dream, so I can&amp;rsquo;t really justify buying myself a replacement for it. So instead, just over a year ago, I decided to get something that is:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Lightweight&lt;/li&gt;&#xA;&lt;li&gt;Cheap&lt;/li&gt;&#xA;&lt;li&gt;Allows me to code on the go&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Looking around a bit, a budget Chromebook seemed like a good choice. I settled on an &lt;a href=&#34;https://www.asus.com/uk/Laptops/ASUS_Chromebook_C201/&#34;&gt;Asus Chromebook C201&lt;/a&gt;, which cost me £190. It has 4GB of RAM, a 16GB SSD, and weighs under a kilo.&lt;/p&gt;&#xA;&lt;p&gt;I thought I could get away with keeping ChromeOS running and still end up with a passable development environment. Unfortunately, my first discovery was that the model I&amp;rsquo;d bought didn&amp;rsquo;t yet have the Android App Store Beta. I should probably have checked that earlier in the process.&lt;/p&gt;&#xA;&lt;p&gt;However, reading around a bit I still thought development on ChromeOS on a bottom-end machine would be possible. Enter Chromebrew. A tool that promised me functional Vim, Python, and Git with little hassle.&lt;/p&gt;&#xA;&lt;p&gt;Setting that up was reasonably easy. Although I mildly resent having to enable a special &amp;ldquo;developer mode&amp;rdquo; that gives you annoyingly beepy warnings when you boot, all in all it only took a couple of hours of googling to get my dotfiles cloned, vim and python installed, and a helloworld run to prove to myself it was workable.&lt;/p&gt;&#xA;&lt;p&gt;I&amp;rsquo;ve now had the machine for just over a year I&amp;rsquo;ve concluded it&amp;rsquo;s worked pretty much exactly as intended. I now take it everywhere (I&amp;rsquo;m typing this on it!) because it weighs less than a kilo. And because the machine cost less than my phone (and all data on it is saved to the cloud somewhere) I&amp;rsquo;m not overly concerned about it being lost or stolen.&lt;/p&gt;&#xA;&lt;p&gt;The major advantage is that having something that&amp;rsquo;s always on me lets me use spare half hours productively, where previously I would have just stared at my phone. It&amp;rsquo;s actually especially noticeable because I really dislike using my phone for a lot of things, like shopping or drafting emails longer than two sentences.&lt;/p&gt;&#xA;&lt;p&gt;There are a few remaining annoyances, which come from the fact that you&amp;rsquo;re not really meant to use the terminal on ChromeOS. I haven&amp;rsquo;t got around to installing some of the basic command-line tools my fingers type automatically, like &lt;code&gt;less&lt;/code&gt; or &lt;code&gt;man&lt;/code&gt;. They&amp;rsquo;re not installed by default, which surprised me.&lt;/p&gt;&#xA;&lt;p&gt;I also don&amp;rsquo;t think I can update ChromeOS without wiping my &amp;ldquo;developer-mode&amp;rdquo; set up, which is a pain. This doesn&amp;rsquo;t make the security nerd in me happy, as I don&amp;rsquo;t get any patches, nor the tech nerd, since I don&amp;rsquo;t get any new features. I want to do some more research into this, to see if I can work around it somehow.&lt;/p&gt;&#xA;&lt;p&gt;All in all though this has been a really great change to my life. Having a computer small and light enough to code on everywhere, at a bargain-basement price, really has changed the way I work for the better.&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>Getting the right scale</title>
      <link>https://tomrenner.com/posts/getting-the-right-scale/</link>
      <pubDate>Sat, 27 Oct 2018 00:00:00 +0000</pubDate><author>contact@tomrenner.com (Tom Renner)</author>
      <guid>https://tomrenner.com/posts/getting-the-right-scale/</guid>
      <description>&lt;p&gt;Agile tells us that the most critical thing for getting software right is not up front design, but getting something out there and used, and then incorporating feedback. By getting feedback early, you are able to respond faster, changing your (initially incorrect) design in small steps towards a better solution. This works better in practice than designing everything at the start very carefully, which feels rigid and inflexible in the face of new information over the course of a project.&lt;/p&gt;&#xA;&lt;p&gt;This is good. Everyone hates waterfalls.&lt;/p&gt;&#xA;&lt;p&gt;However, iterative development processes also come with their own problems. Scope creep can become a much larger risk when there is the opportunity for specification change and revision at later stages, which is especially apparent on large projects.&lt;/p&gt;&#xA;&lt;p&gt;My company works in the higher education sector, where development projects often last 6-12 months. Iterative change and feedback in this environment needs careful management to avoid the project scope increasing over time. This often feel like a failure in system design and specification, bringing us back to the need for better up front design! This can leave you feeling you&amp;rsquo;re between a rock and a hard place with too much upfront design vs. ever getting the damn thing live.&lt;/p&gt;&#xA;&lt;p&gt;So we are looking for the sweet spot between too much up-front design and enough to mitigate scope creep and major structural changes late on on projects.&lt;/p&gt;&#xA;&lt;p&gt;I have suspicions that sweet spot is very small, and that&amp;rsquo;s a major reason why this job is hard. It&amp;rsquo;s also why every codebase is littered with &lt;code&gt;//TODO&lt;/code&gt;s, and why most of us find it much easier to start than finish a side-project. The real world gets involved and messes up your Grand Vision for The Perfect System (which, realistically, is probably why you started the project in the first place), and all of a sudden a &amp;ldquo;Grandish Idea for Another Probably Ok Webapp&amp;rdquo; hasn&amp;rsquo;t had a commit in 3 months.&lt;/p&gt;&#xA;&lt;p&gt;All developer know that some problems require quick fixes, some fundamental re-writes of the system. Correctly resolving a problem and it not then causing you a major ballache later depends on picking the right scope of solution, and being able to identify that scope is a seriously valuable skill to have.&lt;/p&gt;&#xA;&lt;p&gt;Scope: Are you looking for the One True Solution to all issues that look anything like the current one?&#xA;Are you trying to make something that is generalisable to other parts of the system?&lt;/p&gt;&#xA;&lt;p&gt;So here are three things I try to keep in mind when starting out on a problem, to try to find that sweet spot of design:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;We want to only write this bit of code once&lt;/li&gt;&#xA;&lt;li&gt;We want to spend the minimum time possible writing this code&lt;/li&gt;&#xA;&lt;li&gt;If possible we want to reuse this code in as many places as possible in future&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;The aim of this is to try to get as close to the optimum scope of solution that takes the minimum time while not having been revisited. Getting this step right for each small task minimises negative effects of project changes later on, by keeping your codebase flexible to react to future discoveries.&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>A quick guide for productive development</title>
      <link>https://tomrenner.com/posts/a-quick-guide-for-productive-development/</link>
      <pubDate>Thu, 08 Feb 2018 00:00:00 +0000</pubDate><author>contact@tomrenner.com (Tom Renner)</author>
      <guid>https://tomrenner.com/posts/a-quick-guide-for-productive-development/</guid>
      <description>&lt;p&gt;It is upsettingly easy to work hard without being productive. &lt;a href=&#34;https://theleanstartup.com/book&#34;&gt;The Lean Startup&lt;/a&gt; includes a quote I really liked:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&amp;ldquo;[People] feel that a good day is one in which they did their job well all day.&amp;rdquo;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;The point being that this doesn&amp;rsquo;t account for whether you are doing the right work. This is a really common trap to fall in to. I know I have often worked really hard on something and produced code I&amp;rsquo;m very happy with, only to talk to my boss or the client and find that nobody else seems to be nearly as pleased with what I&amp;rsquo;ve produced as I am.&lt;/p&gt;&#xA;&lt;p&gt;In these cases it&amp;rsquo;s tempting to throw up your hands and say that other people don&amp;rsquo;t appreciate your efforts (the &amp;ldquo;misunderstood genius&amp;rdquo; approach), but more accurately there has been a disconnect between their values and your prioritisation.&lt;/p&gt;&#xA;&lt;p&gt;So what do I do to try to avoid these problems?&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Take every short-cut. Not as in &amp;ldquo;if we hack this together it might work&amp;rdquo;, but make sure you ONLY address the major requirements (you know the critical requirements, right?). &amp;ldquo;Nice to have&amp;quot;s can wait till v1.1, and probably don&amp;rsquo;t matter anyway.&lt;/li&gt;&#xA;&lt;li&gt;Prioritise my time by value rather then complexity. This helps avoid the problem of perfectionism, and stops me doing things just because they seem challenging or fun.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;So realistically, my pattern of work goes something like:&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;Estimate the things I want to do in the next cycle&lt;/li&gt;&#xA;&lt;li&gt;Order them by &lt;strong&gt;value&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;li&gt;Try to do them&lt;/li&gt;&#xA;&lt;li&gt;Work out half way through that I might miss some of them&lt;/li&gt;&#xA;&lt;li&gt;Observe what I am spending my time on, and make sure it&amp;rsquo;s the most important of the things listed in point 1.&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;p&gt;This tends to get me closer to what I aimed to do than if I try to start by tackling the most complex tasks first. Complex tasks are sometimes the most valuable, but complexity also depends a lot on the skill-set you have as a developer. I, for example, suck at front end things. CSS and client-side JS don&amp;rsquo;t like me (and I don&amp;rsquo;t try too hard to like them). Recently I found myself spending time getting a web form to recalculate related fields on changes around the form. It was only after two hours that I thought about how little value this task ultimately provided. It was surprisingly &lt;em&gt;complex&lt;/em&gt; (because of an uninteresting set of event change handlers) but not actually very valuable for the overall work I needed to do that week.&lt;/p&gt;&#xA;&lt;p&gt;It is also important to remember that value should be measured as a team, not as individuals. An individual will think they&amp;rsquo;ve produced maximal value in a day when they sit at their desk and work on their own tasks all day. But maximising value produced for the team will require cross-functional tasks, and collaboration. That level of perspective needs active thought and coordination, not just personal prioritisation.&lt;/p&gt;&#xA;&lt;p&gt;I find most people assign their time by complexity. I think you need to do the value assessment first. Keep that in mind (even after sharing out tasks) to keep everything on track.&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>The customer is always right</title>
      <link>https://tomrenner.com/posts/the-customer-is-always-right/</link>
      <pubDate>Sat, 04 Feb 2017 00:00:00 +0000</pubDate><author>contact@tomrenner.com (Tom Renner)</author>
      <guid>https://tomrenner.com/posts/the-customer-is-always-right/</guid>
      <description>&lt;p&gt;A theme of the last few books I&amp;rsquo;ve read has been user testing. Specifically, that it is completely unreasonable to suggest that you could produce a system that will work smoothly in production without first getting several actual human users unfamiliar with your system, from your clients or in a related industry, to road-test the system.&lt;/p&gt;&#xA;&lt;p&gt;I think anyone can see that this is a good idea. It&amp;rsquo;s far too easy to make assumptions about the users&amp;rsquo; requirements or use cases. Without user testing software would rarely solve the problems it was designed for.&lt;/p&gt;&#xA;&lt;p&gt;But what about us as developers? A developer&amp;rsquo;s job is to write software. We&amp;rsquo;re generally quite good at breaking down problems into many smaller pieces, dealing with abstract concepts, and linking those together into a program control flow.&lt;/p&gt;&#xA;&lt;p&gt;This kind of thinking is facilitated by long periods of focus. Those times when the environment is distraction-free and you&amp;rsquo;re able to get hard problems thought about. Flow. It&amp;rsquo;s a familiar concept, and all developers hate any interruption that drops you out of this thinking pattern.&lt;/p&gt;&#xA;&lt;p&gt;Unfortunately, every workplace comes with interruptions. Support requests hiting the issue tracker, clients ringing to ask when that new feature is coming, your manager &amp;ldquo;just checking in&amp;rdquo;&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;All of these people are holding us back. If they could understand how much more effort it is to regain that state of mind where code is simple they would never interrupt. There are so many ways they could solve their own problems if they had thought properly, or used the software we build them better.&lt;/p&gt;&#xA;&lt;p&gt;I suspect all devs have sympathised with the bug report resolution &amp;ldquo;problem found between keyboard and chair&amp;rdquo;.&lt;/p&gt;&#xA;&lt;p&gt;And that&amp;rsquo;s the problem really. We&amp;rsquo;re good at software, and they&amp;rsquo;re not. This is why they aren&amp;rsquo;t developers, and we are.&lt;/p&gt;&#xA;&lt;p&gt;&amp;hellip; Except all of the above three paragraphs is wrong. You know what? These are the same people who we desperately wanted to hear from back in the first paragraph. It is all to easy to think of people who struggle with our software as being bad at their job. But in reality it should be expected that users aren&amp;rsquo;t computer experts - their jobs require other skills, and they&amp;rsquo;ve paid us to deal with the computer problems &lt;em&gt;for them&lt;/em&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Customer support is essentially a massive user test.&lt;/strong&gt; It is a really easy habit to fall into to ignore or belittle feedback. Repeated annoyances (probably) point to a UX problem, even if the root cause hasn&amp;rsquo;t been identified. And we shouldn&amp;rsquo;t expect feedback of that kind - that&amp;rsquo;s our domain. We&amp;rsquo;re the developers, we&amp;rsquo;re paid to solve &lt;em&gt;their&lt;/em&gt; problems.&lt;/p&gt;&#xA;&lt;p&gt;So saying &amp;ldquo;the customer is always right&amp;rdquo; shouldn&amp;rsquo;t be an attempt to encourage good customer service. It should be an acknowledgement that our users have a lot of expertise in the problem domain we&amp;rsquo;re developing for. Our expertise is in software. Rather than apply all the same standard UX and solutions to all walks of life, sometimes we need to recognise that we&amp;rsquo;re comparatively ignorant of how and why our software is actually used, and tailor our approach a bit better.&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>Why am I doing this again?</title>
      <link>https://tomrenner.com/posts/why-am-i-doing-this-again/</link>
      <pubDate>Fri, 11 Nov 2016 00:00:00 +0000</pubDate><author>contact@tomrenner.com (Tom Renner)</author>
      <guid>https://tomrenner.com/posts/why-am-i-doing-this-again/</guid>
      <description>&lt;h3 id=&#34;why-do-i-want-to-have-my-own-site&#34;&gt;Why do I want to have my own site?&lt;/h3&gt;&#xA;&lt;p&gt;Narcissism mostly. I found the domain was available, decided as a self-respecting developer I should probably buy it. But then there&amp;rsquo;s no point owning a domain if you don&amp;rsquo;t put something there. So that was it really - I had to I had to get my act together and actually write the thing.&lt;/p&gt;&#xA;&lt;h3 id=&#34;i-enjoy-developing&#34;&gt;I enjoy developing&lt;/h3&gt;&#xA;&lt;p&gt;I&amp;rsquo;m a person who finds it hard to devote time outside of office hours to write code. I suspect it&amp;rsquo;s because I hate fun. Whatever the reason, if I&amp;rsquo;m not doing something &lt;em&gt;useful&lt;/em&gt;, I won&amp;rsquo;t bother. So having decided I would like to code more, I had to find something useful to write.&lt;/p&gt;&#xA;&lt;p&gt;Incidentally that&amp;rsquo;s also the reason why the site looks the way it does. I decided it would be quicker and much less interesting to use a site builder. So instead I&amp;rsquo;m writing everything myself. The initial toolkit is Ruby, building on a Sinatra framework, jQuery, HTML and CSS.&lt;/p&gt;&#xA;&lt;h3 id=&#34;what-am-i-going-to-post-about&#34;&gt;What am I going to post about?&lt;/h3&gt;&#xA;&lt;p&gt;Every now and then I find myself with Opinions about How It Should Be Done. I also read books about things related to software, and go to events that sound interesting. I will probably write up some reviews or comments on these and shove them up here, and maybe even comments on other things that I care about enough to write about them.&lt;/p&gt;&#xA;&lt;h3 id=&#34;writing-is-both-fun-and-hard&#34;&gt;Writing is both fun &lt;em&gt;and&lt;/em&gt; hard&lt;/h3&gt;&#xA;&lt;p&gt;I want to write about these things because I know basically nothing about huge areas of computer science. So I&amp;rsquo;m hoping that posting here will help me learn things as well. I&amp;rsquo;ve also observed that a lot of people I think are good at &lt;em&gt;stuff&lt;/em&gt; are also good at articulating themselves. It seems likely that trying to clarify thoughts into a post will help me understand and explain a topic. Plus all the cool devs do it, so maybe they&amp;rsquo;ll let me join in if I do it too.&lt;/p&gt;&#xA;&lt;h3 id=&#34;did-that-answer-your-question&#34;&gt;Did that answer your question?&lt;/h3&gt;&#xA;&lt;p&gt;So that&amp;rsquo;s a pretty broad introduction to the site. It&amp;rsquo;s my site, and I post on it. &lt;a href=&#34;%22https://www.youtube.com/watch?v=dg3PberzvXo%22&#34;&gt;It&amp;rsquo;s not perfect, but it&amp;rsquo;s mine&lt;/a&gt;. Any comments you have about anything you see on the site are welcomed - I prefer talking to people than to myself, and judging by the headings of this post I could use more contact with the outside world. Get in touch.&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>&#34;Full-stack&#34; and why I don&#39;t like it</title>
      <link>https://tomrenner.com/posts/fullstack/</link>
      <pubDate>Mon, 10 Oct 2016 00:00:00 +0000</pubDate><author>contact@tomrenner.com (Tom Renner)</author>
      <guid>https://tomrenner.com/posts/fullstack/</guid>
      <description>&lt;p&gt;Last week I went to a jobs event, recruiting for my company. I was there on my own, and recruiting is a pretty new experience for me, so I was kinda excited about it. The attendees were a mix of graduates, bootcampers, and a few more senior developers, but mostly the crowd were looking for their first or second job. I enjoy going out and talking to people about their experiences with software &amp;ndash; I think breadth of knowledge is really valuable &amp;ndash; so I found it interesting seeing what other people are looking for in a job. I&amp;rsquo;ve only ever had one; maybe I&amp;rsquo;ve aimed for all the wrong things!&lt;/p&gt;&#xA;&lt;p&gt;But there was one comment made that stuck out. It was from a developer at a similar stage in their career to me &amp;ndash; two years professional experience &amp;ndash; who was looking to switch companies. He&amp;rsquo;d been at a large firm, and found things all a bit too lumbering to get anything done. All of that sounded very reasonable, and I was agreeing with a lot of what he said, until he used the phrase&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&amp;ldquo;&amp;hellip; of course I&amp;rsquo;m full-stack, you know, all that standard stuff really&amp;rdquo;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;Now I know a lot has been written about the myth of the full-stack developer, but the fact that at a recruitment event this was considered &lt;em&gt;&amp;ldquo;standard stuff&amp;rdquo;&lt;/em&gt; really took me by surprise. Full-stack, by definition, means you&amp;rsquo;re experienced with technologies at all levels of a production application. After two years professional experience? Even after ten? And even if that were true (hint: I don&amp;rsquo;t think it is), it can&amp;rsquo;t be a helpful way of identifying yourself to potential employers.&lt;/p&gt;&#xA;&lt;p&gt;This myth is something that is a buzz-word on dodgy recruitment ads &amp;ndash; the same as the idea of being &amp;ldquo;10x&amp;rdquo; or a &amp;ldquo;rockstar&amp;rdquo; or &amp;ldquo;ninja&amp;rdquo; or &amp;ldquo;guru&amp;rdquo;. Because you&amp;rsquo;d have to be at some kind of coding Mozart to have equal proficiency across all levels as someone who has specialised. There&amp;rsquo;s only so much you can do by simply having raw brainpower or talent. But because it&amp;rsquo;s a word on the job spec, it&amp;rsquo;s the word applicants find themselves using to try to show they cover the requirements.&lt;/p&gt;&#xA;&lt;p&gt;I think the word they&amp;rsquo;re aiming for is &lt;em&gt;generalist&lt;/em&gt;. Maybe I&amp;rsquo;m going to sound picky, but I think the distinction here is important. Being a generalist suggests that the skills you value and are good at are generally applicable. That the specific technologies you&amp;rsquo;ve used aren&amp;rsquo;t your strengths as a developer.&lt;/p&gt;&#xA;&lt;p&gt;Setting my hatred of buzzwords aside, it&amp;rsquo;s worth thinking about what these two descriptions imply about you. When you&amp;rsquo;re presenting yourself, &lt;em&gt;especially&lt;/em&gt; to a potential employer, you need to be thinking about what impression you&amp;rsquo;re giving your audience. By describing yourself as a generalist, you&amp;rsquo;re describing something about your skill-set, and giving useful information about what you consider to be the most applicable parts of your experience &amp;ndash; your abilities to learn and turn your hand to new problems. &amp;ldquo;Full-stack&amp;rdquo; make you sound like you&amp;rsquo;re either ticking boxes or think you&amp;rsquo;re perfect at everything.&lt;/p&gt;&#xA;&lt;p&gt;By focussing on the technology stack you invite negative criticism of your abilities. Any part of the Full Stack(TM) (which, by the way, will vary between companies) that you&amp;rsquo;re not so proficient with becomes a flaw in your CV. And quite apart from this you are failing to highlight all of the other skills that you need to be a developer.&lt;/p&gt;&#xA;&lt;p&gt;I think the point I&amp;rsquo;m trying to make is that the phrase &amp;ldquo;full-stack developer&amp;rdquo; shifts the conversation onto negatively looking at the technologies you&amp;rsquo;ve worked with, and  that&amp;rsquo;s not a good thing, whether you&amp;rsquo;re the employer or the applicant. &lt;strong&gt;It would be great if we could stop saying it like it is.&lt;/strong&gt;&lt;/p&gt;&#xA;</description>
    </item>
  </channel>
</rss>