Control freaks: how we built our own version control for Matillion
Weāve all been there - itās a couple of days or even the night before an important deadline and one of the following happens: You lose your memory stick with all your work on it and scramble to recreate it but canāt get it back to the way it was.You make some more āadvancementsā to your work and suddenly everything is broken and you canāt seem to get it back… Continue reading
A day in the life of a Web Analyst
Hi, Iām Lana and Iām a Web Analyst within the Analytics team here at FreeAgent. I primarily look after our Google platform products such as Google Analytics 360, Google Optimize, Google Data Studio and Google Tag Manager. When I tell people my job title, usually the next question I get is āSo what is it you actually do then?ā To help answer this question, I decided to spend a day… Continue reading
Shopping for data: How thinking about supermarkets might help you to manage your Looker implementation
This blog makes a comparison between a well run supermarket and a well designed Looker implementation. Continue reading
We're hiring! Check out our vacancies š
Timecop vs Rails TimeHelpers
TL;DR - You probably canāt replace Timecop with Rails' built in TimeHelpers, as TimeHelpers only recreates Timecopās freeze method, and canāt handle nested travelling. Timecop is the go-to gem for testing time-dependent code, as it allows you to manipulate the current time during test runs. This is important because without control over the time, flakey tests can emerge in your codebase. A very simple example is testing the created_at attribute… Continue reading
Weāre Gonna Need a Bigger Boat
Earlier this year, the FreeAgent marketing website www.freeagent.com was the target of a volumetric Distributed Denial of Service (DDoS) HTTP flood attack. This was a relatively unsophisticated attack in that it targeted a particular static endpoint of our website with a massive number of HTTP GET requests from multiple remote IP addresses around the globe, as visualised on the map below. Predominantly serving the UK small business base, FreeAgent wouldnāt… Continue reading
Managing Python dependencies across multiple Data Science projects with Poetry
Python is the programming language of choice for running analysis, building models and running machine learning services in production for the Data Science team at FreeAgent. A key reason we chose Python is the great ecosystem of packages available: NumPy, pandas, SciPy and scikit-learn, deep learning frameworks like TensorFlow and more bespoke options for specific tasks like Click for developing CLIs. This wealth of options is a great strength of… Continue reading
Unpacking Amazon ECS
The following post is a high-level description of Amazon Web Servicesā Elastic Container Service (ECS), the relationship between its components, and how they can be used to deploy a web application. ECS is a fully managed container service. It is akin to Kubernetes, but ultimately it is simpler and has fewer moving parts. ECS offers the security, reliability and scalability that is customary with AWS. The Fargate engine provides a… Continue reading
The Mobile Apps and the Tester
The replatforming of our hybrid mobile app to separate iOS and Android native apps was already well under way when I arrived at FreeAgent as a test engineer for the mobile team. Since then we have carved out processes that the whole team can contribute to, giving us confidence that for each release our apps are in good shape. Here are a few things we are doing to ensure this.… Continue reading
Six years of data science and analytics interns at FreeAgent
Itās hard to believe weāve been running internships in our data teams for six years now, and weāre about to start recruitment for the seventh time. Things have changed a little since our first intern started, as last year saw more than four times as many staff in the wider team and our first remote internship during the coronavirus pandemic. Iāve always tended to think of our internships as a… Continue reading
Testing Child Processes in Ruby
I was recently writing a piece of code that we wanted to act as a supervisor of child processes. We wanted to ask this supervisor the following āHello there, would you mind running this task in a child process? Thanks!ā. From here the supervisor would create a process, keep track of it so we can stop it if necessary, and run the given piece of code in it. This supervisor… Continue reading