The Curious Engineer

All blogs / Ruby / Rails

Grinding Gears

engineering.freeagent.com

Tales of code crunching from the FreeAgent Engineering team

Ruby / RailsAI / MLMobile / iOS / AndroidFrontend / CSS / browsers

Posts
223 from 24 Aug 2011 to 27 Jul 2026
Posting
monthly (9 in the last year)
Kind
company blog
Feed
https://engineering.freeagent.com/feed/

2026 8

  1. The Fellowship of Code: My Quest at Ruby for Good in Ghent
  2. Spec-tacular: ways to think about writing expressive RSpec
  3. Web Day Out, March 2026
  4. Fine-tuning a DistilBERT classifier with numerical and text inputs
  5. Structured outputs with Pydantic AI
  6. Naming Things Is Hard
  7. Two Engineers, One Mentoring Story: Why Both Sides Win
  8. Persisting nested form attribute indexes through Turbo updates

2025 19

  1. How we Use Dagster Automations in our Data Pipeline
  2. A refreshing take: using serverside rendering to reduce fragile DOM state
  3. Streamlining DBT Macro Testing: A Unit Test Approach with Pytest and Jinja
  4. Waiting for it with Capybara’s synchronize method
  5. Wiggling my way to a win
  6. Switching to Swift: The iOS Migration
  7. Building the bridge from education to real-world application
  8. Building the building blocks: My summer on FreeAgent’s Design System Team
  9. Uncharted Waters: a guide to exploring unfamiliar codebases
  10. Creating re-usable descriptions in dbt with Jinja docs
  11. The Engineering Behind Salesforce at FreeAgent
  12. View specs: rendering templates that are nested within a view component
  13. The Other Copilot: Coding with AI
  14. Decoding Data Orchestration Tools: Comparing Prefect, Dagster, Airflow, and Mage
  15. The 5 rules for migrating data pipelines successfully
  16. State of the browser 2025
  17. Mission jQuery Zero: How FreeAgent removed jQuery from our application
  18. Introducing Analytics Engineering
  19. A case of missing validation messages

2024 11

  1. The five stages of AI tool adoption: a developer’s journey
  2. From QA Engineer to Software Engineer: my journey
  3. Blasting away with Jetpack Compose: Android development at FreeAgent
  4. Hybrid working: finding balance in flexibility
  5. It takes a village to raise an intern
  6. Breaking the coding doom loop: lessons from my intern project
  7. Thinking on paper the software engineering way
  8. Combining text with numerical and categorical features for classification
  9. How the Ruby Interpreter Creates Methods on the Fly
  10. Restructuring our analytics team
  11. Using API Gateway, Lambda, SageMaker and DynamoDB to build a categorisation service in AWS

2023 18

  1. Combining machine learning with rules-based personalisation
  2. The architecture of FreeStyle, our design system
  3. Ease into Ruby with a Python background
  4. Factories: don’t stop production!
  5. How to survive imposter syndrome in your software engineering internship
  6. My internship project: from ideation to implementation
  7. Fireside chats about tech careers and automation paranoia
  8. Combining data from different sources with SageMaker pipelines
  9. A view of technical leadership from across the industry
  10. The web application brand refresh journey
  11. Five principles for writing an engineering progression framework
  12. Generative AI: Programmable Reasoning Machines of the Future
  13. Challenge Accepted: Our Weekly Looker Challenge
  14. Readable Dates in Rails
  15. Meet our women in engineering (Part 2)
  16. Meet our women in engineering
  17. The Data Science Internship Chronicles: A Starfleet-worthy Tale of Numeric Exploration
  18. Mindfulness with GitHub

2022 28

  1. How we hire in engineering
  2. Type checking in Ruby – Part 1
  3. My experience as an Analytics Intern
  4. Fixing my first bug – the experience
  5. A brief introduction to ‘the cloud’ and managing infrastructure with code
  6. What is a tech spec and why do I need one?
  7. The 4 SQL queries you need to debug Redshift performance
  8. So you’re going to be an intern
  9. CSS Day conference, June 2022
  10. Engineering lessons from my SaaS startup
  11. How to boost your confidence as a beginner software engineer
  12. An introduction to object-oriented programming
  13. What a data science degree doesn’t teach you
  14. Getting started with Jupyter Notebook
  15. A 12-step guide to AWS cost optimisation
  16. In full flow: moving from Jenkins to Actions – Part 1
  17. How we structure our data teams at FreeAgent
  18. 10 tips and tricks for a good intern job application
  19. The three skills you need to be a Data Analyst, and how to get them – Part 3
  20. The three skills you need to be a Data Analyst, and how to get them – Part 2
  21. The three skills you need to be a Data Analyst, and how to get them – Part 1
  22. The legendary data warehouse application
  23. Hosting Women Who Code Edinburgh
  24. Trading the lab coat for the computer – my journey to data science
  25. Training Hugging Face models in parallel with SageMaker
  26. Our data science hiring process
  27. Hiding Elements on the Web
  28. How I prepare for a tech job interview

2021 23

  1. Being an Introvert in a Meeting
  2. Using data to understand the effects of a four day working week
  3. Here’s to Thriday
  4. Fine-Tuning BERT for multiclass categorisation with Amazon SageMaker
  5. Software engineering: 5 things they don’t teach you at university
  6. The Value of an Internship at FreeAgent
  7. New wine, old skins – how FreeAgent blends existing tools and fresh approaches
  8. I Came, I Saw, I Categorised
  9. Lessons from my first software engineering internship
  10. Bank Transaction Entity Detection with AWS Comprehend
  11. Say hello to some of our women in engineering!
  12. Titlecase, underscore and laser guns
  13. Engineering Principles at FreeAgent
  14. Control freaks: how we built our own version control for Matillion
  15. A day in the life of a Web Analyst
  16. Shopping for data: How thinking about supermarkets might help you to manage your Looker implementation
  17. Timecop vs Rails TimeHelpers
  18. We’re Gonna Need a Bigger Boat
  19. Managing Python dependencies across multiple Data Science projects with Poetry
  20. Unpacking Amazon ECS
  21. The Mobile Apps and the Tester
  22. Six years of data science and analytics interns at FreeAgent
  23. Testing Child Processes in Ruby

2020 21

  1. Moving 100,000 customers from co-lo data centres to the cloud. With zero downtime.
  2. Answering bigger questions with BigQuery
  3. Empowering our practices: Take 2
  4. Breathing New Life into Dormant Code
  5. Can’t someone else do it? Automating Looker Housekeeping in Two Days
  6. Return of the intern
  7. How we publish user events for 100,000 customers
  8. What is a Business Intelligence Analyst?
  9. Transaction Taxonomy: Spending the Summer Studying SVMs
  10. Uprooting the Binary Tree
  11. The perils of a bad date
  12. Starting from Home: Remote Data Science Internship at FreeAgent
  13. Switching to Feature Testing with Headless Chrome
  14. How I made personal development work for me
  15. Replatforming the iOS mobile app
  16. How we built the FreeAgent Furlough Calculator in a week
  17. Working from Home: The desks of FreeAgent Engineering
  18. How to Measure Pointless Things?
  19. Tooled Up. A brief history of SaaS tools we’ve loved (and lost)
  20. An Evolution of Bank Feeds: from Yodlee to Open Banking
  21. On the road to real-time reporting with incremental data transfer

2019 23

  1. Serverless: From POC to Production
  2. Let’s talk tools
  3. Rails Girls London 2019: A fun weekend of coding
  4. Head In The Clouds
  5. How To Write A Good Bug Report
  6. To Error, or Not to Error, that is the Question
  7. How we make architectural decisions
  8. From Computer Science student to Software Engineering intern
  9. Down the Ruby Mine, Part III: Splat and splat again
  10. Down the Ruby Mine, Part II: Ruby’s seemingly illogical logical operators
  11. Delivering Practice Insights: My internship at FreeAgent
  12. Down the Ruby Mine, Part I: The code insertion trinity
  13. Deriving and verifying the uncertainty on conversion rate predictions
  14. Being a Data Science Intern at FreeAgent: The first month
  15. Settling in for summer: my data science internship
  16. Shaving yaks – problem solving in Dev Platform
  17. How to count what counts
  18. Why we love accessibility (and you should too!)
  19. Introducing the Band – James Bell
  20. Micro-batching Event Data Into Amazon Redshift
  21. Surviving your first winter as a remote worker
  22. Separating job applicants in multiple dimensions
  23. From Finder to Sublime Text

2018 14

  1. What We Value – Writing Code At FreeAgent
  2. Have your butler do the de-linting
  3. FreeAgent is now on Rails 5.2!
  4. Wondering where the weeks went: a reminiscent reflection of my FreeAgent internship
  5. Accurately ascertaining attitudes: designing unbiased survey questions
  6. Sourcing a suitable sample: understanding selection bias in survey data
  7. My Summer @ FreeAgent
  8. DevBots, squirrels and bouncing emails — just another intern’s summer
  9. Summer in the city: my data science internship at FreeAgent
  10. Dealing with dirty data: useful functions for data cleaning in R
  11. Clean house: clear mind. Clean data: clear findings.
  12. Castles, canals and coffee: my first week as a FreeAgent data science intern
  13. Rails migration aliases with fzf
  14. Remote Desks (Revisited!)

2017 8

  1. Ruby 2.5: How’s That Backtrace looking?
  2. Ruby 2.5: Not Blocking My Rescue
  3. Ruby 2.5: yield_self
  4. Ruby 2.5: The Christmas Present
  5. FreeAgent Testermonials: Getting rid of ‘QA’ and why what we call things matters
  6. External authentication scripts in OpenVPN the right way
  7. Running a high-availability SaaS infrastructure without breaking the bank
  8. FreeAgent Testermonials: Making user stories valuable with exit criteria

2016 10

  1. Schrodinger’s Ruby array
  2. Passphrase generation using awk
  3. Programming, Burgers, and Treasure: Summer with FreeAgent
  4. Rest in peace, @mathie
  5. Querying the past
  6. How we run 4 hours of tests in under 4 minutes
  7. A brief history of mobile
  8. Many timezones, one team – How do WE stand up?
  9. FreeAgent’s AV Adventure Continues – 12 Months On
  10. Many timezones, one team – how do you stand up?

2015 9

  1. Being a data science intern
  2. Engineering Desks
  3. Weak DH – Time to Level Up
  4. System hardening leads to CVE-2015-3341 and fun with DTrace
  5. React Europe 2015
  6. Brighton Ruby 2015
  7. Complexity will bite you in production
  8. Hack Days Feb 2015
  9. FreeAgent’s AV Adventure

2014 4

  1. Upgrading to Ruby 2.1 (and other fun with YAML and complex regexes)
  2. Updated – API 1.0 blackout dates and EOL
  3. Atlas Probes
  4. Upcoming API 1.0 blackout dates and EOL

2013 4

  1. Sunsetting API 1.0
  2. My Summmer Internship at FreeAgent, 2013
  3. Staying On Track
  4. Going Underground

2012 13

  1. Summer Internships in Engineering – apply for the Class of 2013
  2. Revving the engine
  3. Switching wings mid-flight
  4. Hack Week 2.0 round-up
  5. Hack Week 2.0
  6. Bunking off
  7. Conference Pairs
  8. CoffeeScript with jQuery sprinkles
  9. ! ‘CoffeeScript: two sugars, no bitter aftertaste’
  10. Hack Week round up
  11. Engineering Summer Interns
  12. Hack Week update
  13. Hack Week [initial commit]

2011 10

  1. Puppet and MCollective Talk
  2. Speeding up SSL
  3. Friday Link Party 11-11-11
  4. Friday Link Party – 21st Oct 2011
  5. Understanding the Rails Logger
  6. Friday Link Party
  7. Goodbye, Steve
  8. Friday Link Party – what we’re reading
  9. Tales of a FreeAgent Summer Intern, 2011
  10. On the road