F#'ening TotallyMoney's development toolbox
By Tristian Barrett, Engineering ManagerJul 27th 2022
F#! What started as an odd language choice for one small project 5 years ago, has grown to become a major part of our development toolbox at TotallyMoney.
In that time F#’s influence has expanded from a couple of curious coders, to 10 full time engineers, each of whom eagerly reach for F# as their first choice when constructing TotallyMoney.
As someone on the inside track it’s easy to see why it’s taken such a large amount of developer mindshare. F# offers an unparalleled combination of both safety, and access to a wide range of libraries. With F# we have our feet solidly planted on a pure functional ground, while we are free to grasp into a near endless dotnet ecosystem. When we deploy our code to production we sleep well in the knowledge that we’re not going to be awoken by an errant null exception. And should we need to integrate with a 3rd party vendor — well, at the end of the day it’s dotnet — one of the widest supported platforms out there.
Promoting autonomy. Removing barriers. Fostering sharing. I believe these are things are the reasons F# has grown at TotallyMoney. We really do want people to choose the tools that they feel will make them the most productive. Emphatically so. No pressure to choose what’s easy; or what’s the least risky. Yes, of course there’s a degree of evangelizing between the engineers, but there’s certainly no director on high dictating what people must use.
The best engineers we can be
Now good principles and a bit of luck gave F# a toehold, but I think what drove F# forward from a technical sense is that it empowers engineers to be the best engineers we can be. We are creators and builders. We want to build systems that are flexible. That are dependable. That are, dare I say it, elegant.
We come to F# having seen our previous creations crumble under the weight of hard to express domain logic and overcomplexity. Systems that strain to remain stable. Systems that falter against the ever changing landscape of technical change.
It’s absolutely hubris, but I feel that many of us engineers are looking to build things that we can point to and say: “Look on my works, ye Mighty, and despair!”. We want systems that will last the test of time. Systems that capture and express the problem domain with the least amount of fuss. We’d like to have a chat with a previous colleague, ask about a project we previously worked on, and hope they’ll say: “Oh yeah, that system. It’s still ticking along. People add to it and change it fairly often but it continues to do its job well”.
So yes we do take pride in our work. We choose F# not because of that pride, and not to show off. Instead we choose F# because we believe it enables us to be the best engineers we can be. For the systems we’re building F# really does hit a sweet spot in a way that’s difficult to replicate with other languages.
So while it’s not for everyone; by any measure F# has demonstrated its worth within TotallyMoney. Even after 5 years of using it we continue to learn and explore what F# is capable of, and how to get the most out of it. For all the benefits we’ve seen, at times it feels like we’ve only barely scratched the surface.
The team is currently on the lookout for an F# backend engineer. Visit the TotallyMoney careers page if you're interested in joining us on our mission to help everyone move their finances forward.