<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Writing | Stugoo</title>
    <link>https://stugoo.com/writing/</link>
    <atom:link href="https://stugoo.com/feed.xml" rel="self" type="application/rss+xml"/>
    <description>Writing by Stu Grant on engineering management, front-end development and getting things done.</description>
    <language>en-GB</language>
    <lastBuildDate>Tue, 03 Nov 2026 00:00:00 GMT</lastBuildDate>
    <item>
      <title>Under the hood</title>
      <link>https://stugoo.com/posts/26-11-03-under-the%20hood/</link>
      <guid isPermaLink="true">https://stugoo.com/posts/26-11-03-under-the%20hood/</guid>
      <pubDate>Tue, 03 Nov 2026 00:00:00 GMT</pubDate>
      <description>Reminding myself that underneath it all is just HTML, CSS and JavaScript.</description>
      <category>Front end</category>
      <category>Design systems</category>
      <category>Dependencies</category>
      <category>AI</category>
      <content:encoded><![CDATA[<p>Rebuilding this website, I found myself doing something I hadn't done in years. Building an old-fashioned style guide.</p>
<p>Not a design system. Not a React component library with Storybook, documentation, versioning and a Figma counterpart.</p>
<p>Just a page. An inventory of the headings, buttons, layouts and all the little bits that make up the site.</p>
<p>It's been surprisingly refreshing, and got me thinking about how I ended up back here.</p>
<h2 id="making-it-work">Making it work</h2>
<p>I started building websites back in 2005, and I still remember many of the tricks we used to get a design looking just right across different browsers.</p>
<p>Cutting up Photoshop files and putting them back together in HTML was the day-to-day. Drafting sprite sheets, sliding-door backgrounds, images for rounded corners and fonts before <code>@font-face</code> — If you know, you know.</p>
<p>Working in an agency, jumping across projects and picking up other people's work meant we needed to find ways to make things quick consistent and understandable.</p>
<p>For me, this was a humble single-page style guide.</p>
<p>Much like Story book, it was a collection of every heading, button, form and component variation rendered in isolation. Powered by sensible CSS conventions, reusable templates and eventually approaches like BEM to keep things organised.</p>
<p>It wasn't particularly clever, it didn't need to be, it was all out of the box, low dependency and low tech.</p>
<h2 id="somewhere-along-the-way">Somewhere along the way</h2>
<p>Twenty years later, I've spent a good part of my career standing up and maintaining sophisticated component libraries and design systems. I've know first-hand how impactful they can be when done right, particularly across larger teams and products.</p>
<p>However I've also watched us add abstraction upon abstraction, dependency upon dependency, libraries to manage libraries, tooling to manage the tooling and systems to support the systems.</p>
<p>I remind myself of <code>left-pad</code>, where in 2016, <a href="https://www.infoq.com/news/2016/03/npm/">the tiny npm package was unpublished</a> and broke builds across the JavaScript ecosystem. A few lines of code that was buried in dependency trees, caused widespread disruption.</p>
<p>A decade later, supply-chain attacks like <a href="https://github.blog/security/supply-chain-security/our-plan-for-a-more-secure-npm-supply-chain/">Shai-Hulud</a> have made those dependencies an even more serious consideration.</p>
<p>Now we have AI writing code, AI scanning for vulnerabilities and AI suggesting fixes. A machine-on-machine arms race, with developers caught in the middle reviewing pull requests from one machine to fix code written by another.</p>
<p>Watching the industry become inundated with this makes me want to let the bots fight it out and ask you to wake me when they're done, or perhaps its more like a spring clean...</p>
<p>I'm joking, well mostly... These tools are useful, and these established systems and libraries solve real problems. But there's something faintly ridiculous about the amount of machinery we've built to maintain all the other machinery. I keep hearing the words of an old mentor &quot;keep it simple stupid&quot;.</p>
<h2 id="back-where-i-started">Back where I started</h2>
<p>In my previous post, I talked about moving from the things I need to the things I want.</p>
<p>Well, here's something I don't want. More complexity for the sake of it.</p>
<p>For this website, I'm finding myself quite happy keeping my head down, using the lowest level of abstraction that gets the job done.</p>
<p>HTML for structure, CSS for presentation, JavaScript where it's needed. A few templates and my trusty old style guide.</p>
<p>Browsers are considerably more capable than they were twenty years ago. We can do things natively now that once required all manner of workarounds in the past.</p>
<p>I'm not suggesting we abandon modern tooling or that the old ways were better. I certainly don't miss Internet Explorer or Netscape Navigator.</p>
<p>But it's nice to be reminded that underneath all those abstractions, it's still HTML, CSS and JavaScript.</p>
<p>And sometimes, that's enough.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Time for a change, v2</title>
      <link>https://stugoo.com/posts/2026-10-27-time-for-a-change-v2/</link>
      <guid isPermaLink="true">https://stugoo.com/posts/2026-10-27-time-for-a-change-v2/</guid>
      <pubDate>Tue, 27 Oct 2026 00:00:00 GMT</pubDate>
      <description>For a while I&#39;ve asked for things I needed, now it&#39;s things I want.</description>
      <category>This site</category>
      <category>Kitchen</category>
      <category>Design</category>
      <category>Performance</category>
      <category>AI</category>
      <content:encoded><![CDATA[<p>The first version of this post went up on Christmas Eve, five years ago. Back then I didn't know who I was writing for, so I wrote for myself. That hasn't changed. Admittedly, I've written bugger all since, but plenty else has changed.</p>
<p>There's a point in life where your Christmas list changes from things you want to things you need. A decent frying pan, new socks, the boring stuff that makes life easier. These days I'm going back to asking the big man for things I want. Still, nothing I won't use, but things that make me happy rather than things that fill a void.</p>
<p>The last version of this site was a needs list. Minimum viable, fewer dependencies, nothing it couldn't justify. This one is a wants list.</p>
<p>Five years, a few jobs and a small human later, I've got considerably less time for tinkering. But I've also realised I miss making things just because I want to make them.</p>
<h2 id="a-proper-kitchen">A proper kitchen</h2>
<p>The site had quietly become more of a representation of my kitchen than a blog, and I needed a new one.</p>
<p>My recipes started life on a spreadsheet that was essentially a dumping ground of things I'd made rather than a curated cookbook. Originally I was cooking something new every week, but eventually it became a log of recipes I'd found buried among the 50 open tabs on my phone. I write notes in physical cookbooks too, so the next logical step was to centralise everything somewhere I could actually keep track of and share it.</p>
<p>Transitioning from the sheet to the site was painful. Some things were in metric, some were in US measurements, a few were jumbled up, and some methods just said &quot;make the thing&quot;. So I got stuck into clearing out the mismatched tupperware.</p>
<p>Recipes now have proper sections for dishes with multiple components, and ingredients are checkboxes you can tick off as you go (using pure CSS). There's a switch between metric and US measurements because apparently we still can't agree on how to measure something. The conversions happen at build time, so they'll even work without JavaScript.</p>
<p>I've added a &quot;cook mode&quot; that bumps the text size up so you can read it from across the worktop, turns the method into a checklist, and asks the browser to keep the screen awake. No more jabbing at your phone with hands covered in whatever you're cooking. I'll be testing and fine-tuning this over the next few weeks.</p>
<p>Adding a recipe is now one step too. I paste a link and a recipe page comes back as a pull request, with the method rewritten in my own words and credit given to the original. A lot less copying, pasting and faffing about.</p>
<h2 id="the-things-i-wanted">The things I wanted</h2>
<p>My logo has always been a single, very detailed icon. I've had this contact sheet idea knocking around since it was designed in 2013, and I've finally got round to doing it.</p>
<p>The artwork is drawn once per page as an SVG symbol, and everything else is just <code>use</code>'n it. Each tile on the homepage shows a different crop of the same image, zoomed and panned using <code>viewBox</code>.</p>
<p>Whilst the homepage loads the tiles as one picture of the whole mark and then pull apart into their own contact sheets, the 404 page does the opposite, there's an underlying design choice there or something.</p>
<p>Nobody needs a homepage like this one, but I wanted one that's a bit of fun. There's more fine-tuning to do, so check back later, or not.</p>
<h2 id="keeping-it-lean">Keeping it lean</h2>
<p>Just because I wanted a few toys doesn't mean I wanted to drag in everything and the kitchen sink.</p>
<ul>
<li><strong>System fonts</strong>, so there's nothing to download.</li>
<li><strong>Dark only.</strong> One colour scheme, to rule them all.</li>
<li><strong>Plain CSS components</strong> instead of a framework, you guessed it, no React.</li>
<li><strong>The unused stuff went.</strong> I ported a component library from my design system, then deleted every piece the site doesn't actually use.</li>
</ul>
<p>My logo used to be embedded in every page. Now it only goes where it's needed, and a typical recipe page dropped from 42KB to 13KB. The whole site went from 4.8MB of HTML to 1.6MB.</p>
<p>Every page has a proper description for search engines now too. It turns out none of them ever had one.</p>
<p>It's not perfectly optimised, and it isn't trying to be. The homepage animation is there because I like it, not because it scores well. Lighter where it matters, fun where I want it, and a return to old skool front-end development 101.</p>
<p>Every byte is sacred, every byte is good.</p>
<h2 id="how-it-got-built">How it got built</h2>
<p>I am a number of years past waking up in the middle of the night with a new portfolio idea and being able to afford to spend a night building it. Since I threw my old site up, I've got less time than ever, so I paired on most of this with Claude Code.</p>
<p>As an engineer turned manager, it was a fun and interesting way to spend some evenings. It felt a lot like working with a quick and keen design engineer: brilliant at the legwork, occasionally confident about the wrong thing, and much better once I'd been clear about what I wanted.</p>
<p>It also meant I could spend more time on the bits I enjoy. Playing with ideas, figuring out how things should work, and occasionally making something entirely unnecessary just because I could. Sorry for all the tokens I burned.</p>
<p>In any regard the decisions are still mine, and so are the bugs. And I'll own the source code I only half-read, if the machine lets me.</p>
<h2 id="same-dinner-better-table">Same dinner, better table</h2>
<p>The idea hasn't changed and so, if you're reading this, you're round for dinner.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Engineering Manager introduction</title>
      <link>https://stugoo.com/posts/2022-01-12-manager-introduction/</link>
      <guid isPermaLink="true">https://stugoo.com/posts/2022-01-12-manager-introduction/</guid>
      <pubDate>Wed, 12 Jan 2022 00:00:00 GMT</pubDate>
      <description>Setting clear expectations from the start.</description>
      <category>Management</category>
      <category>Communication</category>
      <content:encoded><![CDATA[<p>Have you ever sat down and told someone &quot;this is how I work&quot;?</p>
<p>The following is based on something that I first experienced when I started reporting to a seasoned manager at FreeAgent. During our first encounter he sat me down and laid exactly what I can expect from him and what he expects of me. I'd never experienced such transparency but afterwards I knew exactly what our time working together would be like. It was great!</p>
<h2 id="why-bother">Why bother</h2>
<p>I've given this introduction enough times that it now feels more like a professional courteously than anything else but I don't want to understate it's importance to my workflow. The aim is to build trust, be transparent and set the expectations as to what it's like to work with me.</p>
<p>Whenever I have a new direct report, meet another manager, or start reporting to someone new/different I give them &quot;the speech&quot;. It not only encompasses who I am, how I operate and what I'm like to work with, it also keeps me right, accountable and grounded, it doesn't let me forget the type of manager I want to be.</p>
<h2 id="the-introduction">The introduction</h2>
<p>I keep my introduction notes on a document or email so it's easy to access and edit as I'm constantly fine tuning and tweaking it depending on the audience. I also find using a bulleted list keeps things conversational.</p>
<p>I always start with a brief introduction about myself and work history, followed by what it's like to work with me. I then set out expectations for the individual and then ask them to do a similar exercise. I tell my counterpart how long it's going to take and then ask them to &quot;settle in for the speech&quot;.</p>
<h3 id="about-me-work-history">About me &amp; work history</h3>
<p>Generally I'll start with my name, how I like to be called, where I'm based, what my family life is like and a couple of my interests. Nobody needs to know when my birthday is but I want people to know I'm more than a talking head on a computer screen.</p>
<p>From there I'll give a brief overview of my work history and technical expertise. I don't just load up my CV and read it out, but instead give a whirlwind tour of my journey to management, the areas I've worked in and a couple of key changes in career direction. I'm looking to show how I arrived here and that I've spent my time trying to stay technically relevant.</p>
<h3 id="working-with-me">Working with me</h3>
<p>Here's where I lay down my management style - which is everything from what drives me day to day to how to my take on work life balance. This is the main body of the introduction which run through quickly:</p>
<p>Here's an overview of what I normally cover:</p>
<ul>
<li>what drives me</li>
<li>my values as a manager and what I pride myself on</li>
<li>my approach product work, delegation and ownership</li>
<li>the environment I like to work in</li>
<li>the support I can offer/give</li>
<li>my demeanour, what I'm like day-to-day and also when I'm grumpy or upset</li>
<li>how to tell me if I'm wrong or heading in the wrong direction</li>
<li>how I like to receive feedback</li>
<li>how I handle conflict inside and outside the team</li>
<li>how I will respond if I don't know</li>
<li>my expectations around communication</li>
<li>work/life balance</li>
<li>my daily/weekly working schedule (assuming I have it figured out already)</li>
<li>how to reach me during the day, if I'm in a meeting, or out of hours</li>
<li>my take on meetings and team ceremonies</li>
</ul>
<p>There is a lot to unpack there and each of these things can be spoken about at length. I don't want to dwell or overload as it can be a lot to cover. What I'm trying to do is lay a transparent foundation about what to expect from me. I tend to say 1/2 lines about each and move on.</p>
<p>E.G &quot;I like know what's going on so when I ask I expect an answer. I get it, &quot;async comms&quot; so I probably don't need an answer <em>now</em>, but I do need an answer.&quot;</p>
<h3 id="expectations-of-you">Expectations of you</h3>
<p>The final part of the introduction changes depending on who I'm speaking to. I won't ask for end of week updates from an executive and so I adjust this section accordingly but I find it easier to have a complied list of things here and omit those which aren't relative.</p>
<ul>
<li>Treat others with respect</li>
<li>If you're frustrated come to me before you act or lash out</li>
<li>I expect ownership of the work we do</li>
<li>If it breaks we should care and fix it</li>
<li>Meet the expectations for your role (a link to a document here helps)</li>
<li>Highlight any risks, or ways of doing things better</li>
<li>Status update on what you're working on</li>
<li>Write it down or it didn't happen</li>
<li>Be direct with me</li>
<li>Speak up</li>
<li>Tell me how you like your feedback</li>
<li>...and finally, tell me what you expect of me/your manager</li>
</ul>
<p>At this point I generally receive a &quot;wow, thank you&quot;, as most seem surprised about how this opens up the relationship between us. In particular the last question creates an opportunity for us to connect: &quot;what do you expect from me&quot;. I've laid myself out, and now you can tell me how I can help.</p>
<h2 id="following-up">Following up</h2>
<p>It's equally important to follow up on this introduction as it really lays the ground for mutual understanding and trust. I've had some open up more than others which is fine, what matters is I tried and they know what to expect from me. Relationships aren't created in an instant but instead forged over many interactions.</p>
<h2 id="conclusion">Conclusion</h2>
<p>It's a fact of managerial life is that people in your team come and go, but and when newbies join your team it's important to make the right impression and set clear expectations about working together. I feel this introduction helps set a common starting place for working with me at least.</p>
]]></content:encoded>
    </item>
    <item>
      <title>The enemy of done</title>
      <link>https://stugoo.com/posts/2022-01-06-the-enemy-of-done/</link>
      <guid isPermaLink="true">https://stugoo.com/posts/2022-01-06-the-enemy-of-done/</guid>
      <pubDate>Thu, 06 Jan 2022 00:00:00 GMT</pubDate>
      <description>Is not perfection, it&#39;s procrastination.</description>
      <category>Shipping</category>
      <category>This site</category>
      <category>Front end</category>
      <content:encoded><![CDATA[<p>&quot;Fuck it, ship it&quot;, the mantra of the 2012 Mozfest still bounces around in my head today as I find myself in the same trap, once again, a year on. I promised myself that I would ship a minimal website, but there I was staring at a holding page.</p>
<p>I had originally built this blog using Jekyll which was ideal at the time. It had minimal dependencies, a shallow learning curve and used rails which aligned with the tech I was using at FreeAgent. I took a no JS approach with minimal, future friendly CSS. It was pretty much good to go. I just wanted something up... and there it was on a basic Netlify instance gathering dust... a year later.  Why didn't I ship anything?</p>
<p>A lot has happened in the last year, there's lots of things I could have written about: I changed job, I evolved my managerial skills, I read a lot of interesting books, I was back teaching lindy classes in a COVID safe environment, I've been experimenting in the kitchen, I built a website for my wife. I've grown both personally and professionally and I want to talk about it... but, the impetus to ship this site hung off two major things:</p>
<ol>
<li>Learn Eleventy (for eh, reasons) and</li>
<li>Migrate all of my recipes out of a stupidly large and unmanageable spreadsheet</li>
</ol>
<p>So with it being the 1 year anniversary of &quot;Minimal viable website&quot; and a family gathering cancelled due to COVID I took the opportunity to migrate from Jekyll to Eleventy and implement a basic Netlify CMS over the 2020 Christmas break. thanks to a great community and fantastic documentation it was a relatively painless endeavour and I learned a lot in the process. I mean it's all just front matter, collections and templates really, all things I was familiar with already. ✅</p>
<p>I created a recipe section as a new home for all the recipes I've gathered over the years. The formatting was so inconsistent I spent more time standardising the content than I did piping all the data through Google sheets and generating the new collection on the fly. I went down the wrong road on more than one occasion but finally have something which was manageable, and shareable. The content is far from perfect, but it's usable and that's what I'm after ✅. Maybe I'll write about that journey a little later.</p>
<p>So here it goes, LGTM ✅, fuck it, ship it.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Minimum Viable Website</title>
      <link>https://stugoo.com/posts/2021-01-04-minimum-viable-website/</link>
      <guid isPermaLink="true">https://stugoo.com/posts/2021-01-04-minimum-viable-website/</guid>
      <pubDate>Wed, 06 Jan 2021 00:00:00 GMT</pubDate>
      <description>Fewer dependencies, better longevity.</description>
      <category>This site</category>
      <category>Front end</category>
      <category>Dependencies</category>
      <content:encoded><![CDATA[<p>My wife and I have been downsizing much of our junk over the last year and I've been looking to trim off any unnecessary commitments. I closed my business a while ago and figured my hosting was somewhere I could make a dent. After roughly 5 years I'd been paying for legacy PHP support for some old Wordpress sites that I either  couldn't offload or could take down for one reason or another and they were needing some upgrades was a result of both laziness and lack of appetite.</p>
<p>About 2 years ago I went through some disaster recovery which blew away my local environments and whilst I have some solid local back ups simply upgrading plugins and deprecated methods wasn’t a quick and easy win. In the end I spent a month of weekends reinstalling my local LAMP stack, meticulously fixing my old wordpress sites just to save a few bucks every month.</p>
<p>And I found myself looking at my old portfolio... I had the foresight to use minimal tools and libraries and yeah, I was super proud it. It was fun, had some of my personality and it got me work. What did else did it need. Now, I claim to know a few things about web accessibility and my old folio was heavily motion based, so much so it could make you sick. I wanted in to add a <code>prefers-reduced-motion</code> flag but when I tried to spin it up it was riddled with security holes and no longer maintained dependencies.</p>
<p>When I tried to add secure certificates (I mean, what year is it) my previous host could provide them but for £50 a month, per website (apparently OpenSSL wasn't an option). I was locked in. I took a step back, realised that it was no longer fit for purpose and just took it down.</p>
<p>So here we are. This website is an experiment in using only what I need. It's something for me. Somewhere to explore the challenges I face every day in the world of. And sure, there'll be some food related things coming soon.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Time for a change</title>
      <link>https://stugoo.com/posts/2020-12-24-time-for-a-change/</link>
      <guid isPermaLink="true">https://stugoo.com/posts/2020-12-24-time-for-a-change/</guid>
      <pubDate>Thu, 24 Dec 2020 00:00:00 GMT</pubDate>
      <description>I don&#39;t know who my audience is so I&#39;ve chosen to write for me.</description>
      <category>Writing</category>
      <category>This site</category>
      <content:encoded><![CDATA[<p>At work, I noticed that some of my team use personal writing to better understand bigger day-to-day problems and challenges. What's the right way to load fonts, what are best practices with images?</p>
<p>I know, this isn't revolutionary, but there’s a few things that I've been wanting to talk about during my career and really I've never sat down to write before. I don't know who my audience is so I've chosen to write for me.</p>
<p>If you're reading this, I'll treat this blog like having you over for dinner. I'm making something I like and I want you to be there to enjoy it with me.</p>
]]></content:encoded>
    </item>
  </channel>
</rss>
