Engineering at TrueLayer: the wabi-sabi way
Our engineering principles guide us as we scale
In traditional Japanese culture, wabi-sabi is an aesthetic based around accepting transience and imperfection. Wabi-sabi acknowledges three simple realities: nothing lasts, nothing is finished, and nothing is perfect.
At TrueLayer we’re creating a platform that empowers engineers, innovators and enterprises to build smarter financial services.
This is made possible by our own ever-growing team of engineers. And as we continue to scale, we want to make sure we’re aligned and keep it consistent. This is why we’ve published our engineering principles — to establish a chain of reasoning that will help make better decisions.
We believe that software is beautiful, imperfect, impermanent and incomplete. It is a story being constantly retold, reimagined and repurposed.
Just like our code, these principles are not set in stone. They will be updated to ensure they continue to be useful and are truly representative of our organisation.
Software is imperfect and incomplete. It’s never “done”, and needs to be adaptable to tomorrow’s challenges — set for small, iterative changes and ship often.
Software engineering isn’t a solo mission. It’s done by teams through a process of collaboration and feedback. Exercise kindness, empathy and humility. Without these things, it’s easy to lose sight of the objective.
Software (and hardware) is for the greater part deterministic. There’s no ghost in the machine and no mysteries that can’t be solved with greater observability. Ensure we can effectively observe the behaviours of our systems, and use data to make good decisions.
Most of the time there is no single right answer. Think big, challenge assumptions, try new things and enjoy the ride. There’s still a lot to invent, so stay creative and curious.
Software is a means to an end. It’s built to solve a real person’s problem. Focus on the user — that’s both our clients and your colleagues — to create something that has true utility.
Software is impermanent. What you write today is going to change tomorrow, strike for simplicity and readability in both code and documentation. It will make the next engineer’s life (and probably yours) a whole lot easier.
From design to implementation and testing, you and your team own the software that you build. So take responsibility, think it through and consider the consequences of your decisions — it’s you that’s going to run it in production and maintain it. Give it the love it deserves.
Test extensively. Collect good metrics and use them to drive your decisions. And if you find yourself repeating processes, automate them instead. This will free up your time to do more interesting stuff.
Building software is a series of strategic trade-off decisions. The following is our hierarchy of “layers” — or things that we care about — with security as the most important.