Things I've written

BlogReferenceThoughtRoad to meProductivityStyle Guide
Upgrading Your AWS Lambdas to Node 20February 19, 2024 – The Node 16 runtime on Lambda will be deprecated in June.Showing a Manage Subscriptions Button in React NativeDecember 29, 2023 – If you implement in-app purchases in your app, you might want to show users a way to manage that subscription by showing links to the App…Launching Flexible FeedDecember 20, 2023 – I released my first Shopify app a few years ago. It’s called Flexible Fulfillment, and it helps store owners distribute orders to…A Mental Framework for DebuggingDecember 11, 2023 – Engineers spend a lot of their time debugging issues. It's a skill you acquire over time, and something that each engineer does in a…Building a Serverless Search Engine Using Fuse.jsDecember 3, 2023 – Using AWS S3 and Lambda to build a cheap and simple search engine.Going back to ObsidianDecember 2, 2023 – Back in 2020 and 2021, I was a heavy user of personal knowledge management (PKMS) tools. Initially Roam Research, where I built up a graph…Advent of Code 2023December 2, 2023 – Trying some new tool combinations this year with Jupyter Notebooks and Node.js.The iPad as a PlatformNovember 27, 2023 – I've used an iPad since the very first year it was introduced. Me and my co-founder Dante managed to convince our school's headmaster that…Comparing Cypress and PlaywrightOctober 22, 2023 – Cypress and Playwright are both end-to-end testing frameworks, usually used to simulate user behaviour in front-end applications.Hybrid Encryption in Node.jsOctober 21, 2023 – I don't get much exposure to encryption in my day-to-day engineering work, but learned recently how to implement what is called hybrid encryption in Node.js, and wanted to jot down my learnings.Finding a Direct Link to a Google Business ProfileOctober 6, 2023 – The other day, I was trying to find a way to link directly to a business listing in Google. There’s a lot of information available about…Running ESBuild in the BrowserSeptember 16, 2023 – So, I found out the other day that it’s possible to run ESBuild – that tool you usually use for bundling Javascript and Typescript code…Learning Some VimSeptember 3, 2023 – I finally decided to start learning some of the basics of vim, something that always seemed elusive to my focus. But I was also getting a bit sick of the confusing `nano` I usually use when quickly editing...Building a RSS Customizer ToolSeptember 1, 2023 – Vercel makes buying domains and deploying apps way too simple, which is how I end up building things like **feedfixer.xyz** as soon as the idea enters my brain.Communicate, Navigate, AviateAugust 10, 2023 – Pilots learn a thing very early on in their training. It’s the phrase “aviate, navigate, communicate”. It teaches them to focus first on…Setting Default Font Family in React NativeJuly 30, 2023 – Here's the right, albeit hacky, way to set a default font in React Native 0.72.Allowing ACLs for S3 Objects in CloudFormationJuly 25, 2023 – AWS has added a few new defaults for new S3 buckets to make it harder to create leaky buckets that put all of your company’s data out there…Don't Use React Props for ThemingJuly 24, 2023 – So we all know that in most cases, using the style prop is considered back practice in React:Improving Content Quality by Using EXIF Image DataJuly 23, 2023 – Last week, we implemented some functionality in Street Art Cities where we’re reading the EXIF metadata from JPEG files uploaded to the…Setting Up Code Coverage Tracking in a MonorepoJuly 23, 2023 – There’s a lot of tools like Codecov to track code coverage. I don’t personally like these tools too much for simpler projects, where I just…Getting Better at HolidaysJuly 21, 2023 – I feel like im getting better at going on holiday and properly switching off from work.Watching Lives UnfoldJuly 18, 2023 – I've been pretty sad about the state of the internet lately. But it is somewhat amazing that this age of media has made it easier than ever to see what the lives of other people are like.Learning About the Tragedy of the CommonsJuly 16, 2023 – I've been reading a few different things recently that have mentioned the concept of the Tragedy of the Commons.Digital Archival with RCloneJuly 16, 2023 – I got a notification the other day that my Dropbox storage was full. Weird, because I haven’t used my Dropbox account in about 5 years, but…Now that the Trust is OverJuly 15, 2023 – I long back to an age of the internet I have never fully experienced myself.Processing MDX into an OpenAPI specificationJuly 15, 2023 – Last night, I realised I wanted to set up a Postman collection for an API we have built. The easiest way to do this seemed to be to import…Producing PDF files in AWS LambdaJuly 9, 2023 – Something I’ve had to do a few times now is to generate PDF files in AWS Lambda. This could be anything from reports to invoices. My…Conventional Commits and Comments Cheat SheetJuly 6, 2023 – A quick overview of the Conventional Commits and Conventional Comments standards.Moving to Visual Studio CodeJuly 1, 2023 – I've been using PhpStorm as my de-facto IDE for about a decade now. I don't really write much PHP anymore, but it's just the IDE I've grown the most comfortable with. It has tons of features and an editor...Changing my Relationship with EmailJuly 1, 2023 – In the last year, I’ve switched from a partnerships-related role to a role that solely involves engineering leadership. Together with that,…Some Ideas from Get TogetherJune 30, 2023 – I've recently been reading the book Get Together. It's all about building communities around a hobby, habit or a product.Exploring FolksonomiesJune 26, 2023 – I've been getting very obsessed with tagging systems around the internet in the last couple of weeks. It all started with me thinking about a new tagging system for artworks on Street Art Cities, and...FTP: Active vs Passive ModeJune 10, 2023 – I know the basics of how FTP works, but only this week I made sure I actually fully understand how the different modes of FTP work. Let’s…Goodbye, ApolloJune 8, 2023 – About a month or two ago, Reddit announced that they are going to start charging for their API, in a move that seems if not inspired by…Moving over Street Art Cities to PMtiles and MapLibreGLJune 8, 2023 – Street Art Cities is basically one big map. Well, lot’s of individual maps.Why only Apple can pull this offJune 5, 2023 – The device announced today by Apple is a very niche device. A first generation, something that – even with its Apple-classic polished…Rough consensusJune 3, 2023 – I’m reading the wonderful book Working In Public by Nadia Eghbal, and there is a reference in there to a note from the Internet Engineering…Preparing for Apple WWDC 2023June 3, 2023 – I wonder how Monday’s event will make me feel about Apple as a whole.The power of `.toString()`June 2, 2023 – Using `.toString` on functions in JavaScript is a powerful way to create reflection-like behaviours.Setting up GitHub Actions to have access to your AWS accountMay 28, 2023 – GitHub Actions is the best CI/CD provider I've used so far. It is extremely flexible, and has really quickly caught up in terms of feature set with CI providers that existed for years before Actions was...What Good Looks LikeMay 21, 2023 – When I think of a successful company, I imagine a team of about 10 to 20 people who earn good wages, love working together and do work…Speeding up your dev workflow with AlfredMay 13, 2023 – Alfred is one of my favourite Mac apps. Here’s how to use custom workflows to enhance your dev experience.Processing incoming email with AWS Simple Email ServiceMay 9, 2023 – Add reply-via-email functionality to your app using Amazon SES.Processing Incoming Email with AWS SESMay 9, 2023 – AWS Simple Email Service is a service I've never been that big of a fan of, because it feels like a bit of a black box. Things have…Building social features using DynamoDB and LambdaApril 8, 2023 – How we built a personalised feeds service and following using serverless on AWS.Returning to slower social mediaFebruary 6, 2023 – No more algorithmically generated feeds with something new every time you refresh, no companies fighting for your attention.Creating a Production-Ready Public API using ServerlessJanuary 1, 2023 – How to build an API using Lambda and API Gateway for use by external developers.Creating a Production-Ready Public API Using ServerlessJanuary 1, 2023 – I've been working with serverless tech like AWS Lambda and AWS API Gateway for quite a while now, but only recently was the first time I…Memories: The Relative ScoreDecember 28, 2022 – Lessons learned as a 16-year old entrepreneur about how simple product features can have a big impact.AWS re:Invent news for serverless developersNovember 30, 2022 – AWS re:Invent has brough many new AWS features. Here are the most interesting ones for serverless developers.Team size mattersNovember 23, 2022 – How big does your team really need to be to achieve your goals? Probably not as big as you think.Battery PoweredAugust 22, 2022 – It’s easy to forget how far batteries have come over the last years — but the Oura Ring is a great reminder of what’s possible now.Using AWS S3 as a simple cache serviceApril 16, 2022 – Using S3 as a simple caching mechanism for any stateless functions that need to save some ephemeral data to keep state.High-riseAugust 11, 2021 – "I fear the moment I'm truly happy with myself, I won't be myself anymore," he said quietly.Slackin' AmazingAugust 5, 2021 – Here are some of my favourite hidden features of Slack. From a talk by Elle Tattersall and myself as part of the NearSt "Lunch & Learn"…Enginears podcastApril 15, 2021 – I got the opportunity to talk with Elliot Kipling about NearSt, the journey from prototype to product market fit, and how we decided to…Interceptors in AxiosApril 5, 2021 – Interceptors in Axios are a great tool to simplify your management of network requests.The CraftOctober 3, 2020 – There’s something unique about creating something from scratch, with nothing but your own vision of what it should be like, with no…Serverless magic links with AWS CognitoJuly 27, 2020 – I've written before about what I consider to be best practices for magic links from a UX perspective. Recently, I got a chance to apply…Practical regular expressionsJuly 26, 2020 – Regular expressions (regex) are one of those topics that a lot of developers find difficult to get started with. I think that's not because…Digital gardensJuly 24, 2020 – Something that I recently came across is the concept of a digital garden. It's not a new concept, although this terminology for it seems to…Undivided attentionJuly 19, 2020 – My granddad passed away earlier this week at age 95. It didn’t come as much of a surprise, he had not been anywhere close to well in the…Fighting for a causeJune 3, 2020 – I was thinking the other day about the fact that I haven’t really fought for a cause since I was in primary school.Good softwareMay 22, 2020 – A lot has been written on this subject, and if you want the definitive guide on product design and software development (if there is such a…Go to / on itMay 21, 2020 – I've been watching some old episodes of NCIS in the background while doing some mundane admin tasks for work (only outside office hours of…Transactional emails at scaleMarch 15, 2020 – At every tech startup I've created, we've had a need for transactional emails. You know, the ones that welcome you after you created your…Just doneFebruary 22, 2020 – INT. BEDROOM - NIGHTStanding strongFebruary 16, 2020 – Tonight I’m standing strongLike that willow tree across the streetAll alone on my balconyThe wind moving past meGusts of cold air hitting…The anti-bullying dayFebruary 9, 2020 – Almost exactly 13 years ago today was my day. A few months earlier, as a 10-year-old, I had started an anti-bullying club. Not because I…The 'why'February 7, 2020 – I’ve been kind of running all of the past few years, even sprinting maybe. Now that I’m not running as much anymore, now that I’m just…Renting in LondonNovember 4, 2019 – When I first lived in London about four years ago, I lived with housemates. That was pretty fun: I was able to help my housemate who was…Better all the timeNovember 27, 2018 – I’ve been extremely lucky in life so far. I’ve been given so many great opportunities, and I’ve received most of them with open arms and…Twenty-oneMarch 11, 2018 – This is it. Tomorrow is the start of a new life, of a new chapter, a new section with a new rhythm, a new feel, a new baseline. We’ve just…Twenty thievesMay 9, 2014 – There once were twenty thieves, sitting in the shade of a giant blade of grass. They had a leader, a strong, but little man. He stood up…