Creating re-usable descriptions in dbt with Jinja docs
If you're working with dbt and find yourself copying the same column descriptions across multiple models, this post is for you. We'll show you how to eliminate that repetition using the Jinja doc function! Continue reading
The Engineering Behind Salesforce at FreeAgent
For nearly 15 years, Salesforce has been the engine room for our customer data here at FreeAgent. Since we first brought it on board in 2011, it has grown from a straightforward CRM into a complex, deeply integrated platform. While one blog post cannot cover every detail, we hope this gives you a better understanding of how we leverage Salesforce and the engineering approach we use to maximise its impact.… Continue reading
View specs: rendering templates that are nested within a view component
FreeAgent makes use of the RSpec and ViewComponent frameworks for unit testing and reusable front-end components respectively. Since FreeAgent is a Ruby on Rails application, we’ll often want to write unit tests for our Rails view templates, using RSpec, i.e., a view spec. When rendering our reusable view components in our view templates, especially complex ones, testing can get a bit confusing, especially if the template is dependent on being… Continue reading
We're hiring! Check out our vacancies 👈
The Other Copilot: Coding with AI
It seems Copilots are ten a penny these days. While our CoPilot accountant partners are a human way to support you using FreeAgent, the flight term has really taken off(!) as branding for AI tools, GitHub’s Copilot being just one of them. The rise of AI tooling for developers has sparked a lot of discussion and controversy as of late. It’s also seen rapid development and innovation, with several code… Continue reading
Decoding Data Orchestration Tools: Comparing Prefect, Dagster, Airflow, and Mage
Introduction Data is exploding, and so are the tools to manage it. From generating and collecting, to cleaning and analyzing, these tools help create valuable products for customers and give stakeholders decisive insights. As Data Engineering at Freeagent continues to evolve, we're focusing on providing more reliability and quality in our data products. For data pipeline building, we've started to move from a no-code approach toward a software engineering focused… Continue reading
The 5 rules for migrating data pipelines successfully
This blog will help you to discover the 5 essential rules to navigate your large-scale data tooling transition smoothly and with minimum disruption. Continue reading
State of the browser 2025
State of the Browser is a small, single-track conference in London. I'd been before, and while it always has a great list of speakers, what I'd forgotten was the extremely welcoming and inclusive atmosphere. For example, it's the first conference I've been to with live captioning, and almost every talk had an accessibility section or angle. Additionally, their business model is built on sponsorship, so they're able to give away… Continue reading
Mission jQuery Zero: How FreeAgent removed jQuery from our application
Just over 3 years ago FreeAgent was running with 4 front-end frameworks, Stimulus, React with Redux, Rails UJS and jQuery and we were about to start adding Turbo to the stack. Running all these different frameworks was not sustainable and we chose to reduce our number of dependencies and first up was jQuery. We called this our legendary jQuery code, code that had helped us grow a business and provide… Continue reading
Introducing Analytics Engineering
Over the last few years we’ve evolved the way our analytics team works to enable easy access to accurate and reliable data for faster, better decision-making. Recently we made one more change—our Business Intelligence Analysts are now Analytics Engineers! Continue reading
A case of missing validation messages
I’ve recently worked on two very similar issues within the FreeAgent app, which is a Rails web application. The problem that was reported in both cases was that when a user tried to submit invalid data they didn’t get any kind of message indicating what went wrong. In case it helps someone else (and let’s be honest to remind myself when I undoubtedly come across it again) I thought I’d… Continue reading