FreeAgent Testermonials: Making user stories valuable with exit criteria
In this post, FreeAgent's resident test engineer explores the use of exit criteria in user stories, the value they provide and how to write them (example included). Table of contents Background and prologue FreeAgent's first test engineer Testing as an embedded practice Testermonials Exit criteria in user stories Introducing exit criteria Exit criteria wins Writing valuable exit criteria An example user story with exit criteria FreeAgentās first test engineer I… Continue reading
Schrodinger’s Ruby array
When can a single array instance in Ruby both be empty and contain items simultaneously? Read on, and find out! Continue reading
Passphrase generation using awk
Given a requirement of generating a temporary passphrase that can be communicated over the phone to another person, I thought of XKCD #936 which suggests using four random words together as a passphrase. Then there's just the question of how to generate that easily. On each system there's a file containing a list of words somewhere, on OS X it's located at /usr/share/dict/words. This contains a good ~236,000 words on… Continue reading
We're hiring! Check out our vacancies š
Programming, Burgers, and Treasure: Summer with FreeAgent
This summer it has been my pleasure to join FreeAgent as a Data Engineering intern. Alongside the analytics and architecture teams, I have been working on a new exciting feature to complement the FreeAgent application. Programming mostly with Python, I have learned a great deal from my colleagues, and I wish to share the experience with you all here on the engineering blog. Since joining in early June, the intern… Continue reading
Rest in peace, @mathie
There wasn't supposed to be anything particularly unusual about today. It started out as a typically drizzly Edinburgh summer morning, grey clouds hanging low above the castle, with just a hopeful glimpse of blue in the distance offering the prospect of a little respite later in the day. It wasn't until I arrived at my desk and checked our Slack channels that I first heard the shocking news of the… Continue reading
Querying the past
Iāve been learning to love the ActiveRecord query interface over the past few months. Whilst I find it infuriating when Iām battling it to do what I actually want, I also relish the power and convenience it gives me for many simple queries. So, when it came to designing a query language for historical data in our systems, ActiveRecord was a natural choice. We can now do queries like: FA::Subscriptions.… Continue reading
How we run 4 hours of tests in under 4 minutes
Here at FreeAgent we have a test suite that contains over 21,000 individual RSpec examples. Currently it takes approximately 4 hours to run in a single process. Hereās how weāve tuned our test suite and CI system (Jenkins) to run them in under 4 minutes. 1. Parallelise The first step is to run the specs in parallel. Test queue We use test-queue, a parallel test runner by Aman Gupta. It… Continue reading
A brief history of mobile
It's been a year since we launched our mobile app! In March 2015 we launched FreeAgent Mobile for iOS. Initially limited to a small feature set, we quickly added new things over the next couple of months: expenses and mileage rebilling, updating and explaining bank transactions, and linking expenses and transactions to projects. In January 2016 we launched our Android version (with the same feature set as iOS), and more… Continue reading
Many timezones, one team – How do WE stand up?
Following the post Many timezones, one team - how do you stand up?, we received quite a bit of feedback and interesting ideas. Thanks for that! Today, we'd like to share our experience of how we addressed this particular issue, and how it's working for us so far. This isn't far from some of the feedback we got. TL;DR We created a separate Slack channel to Stand Up / Down… Continue reading
FreeAgent’s AV Adventure Continues – 12 Months On
It has been exactly a year since my first blog post about FreeAgentās AV Adventure. A lot has changed since then so Iād love to bring you up to speed. For those who havenāt read the original blog post, Iād strongly encourage you to; it outlines our business requirements and gives some background on our earlier AV experiments. When you last saw our boardroom, it was equipped with four desktop… Continue reading