More time for fun.
My journey has not been typical, which is why freelancing suits me. My desire is to help people solve problems. I enjoy optimising and automating processes. My natural curiosity and ability to quickly learn new things allow me to jump into just about any domain and start making a difference, developing the required skills as I go along.
I’m Wes Oldenbeuving-den Haan, an experienced full-stack Ruby on Rails developer with a focus area that covers back-end development, testing, maintenance and security. I eat technical debt for breakfast.
I’m the person you call when you have a Ruby on Rails project that requires an update but you have “some” technical debt and spotty test coverage. Setting up Continuous Integration, Continuous Delivery, hosting or a maintenance plan are other things I can help you with.
You can hire me as an individual freelancer, but I also have experience working as your tech partner with my team of experienced full stack developers. Team members: Rachid and Gerard. We have our office in Amersfoort, the Netherlands, but we prefer remote work and thus can work with anyone anywhere.
I’ve been using the name Narnach on the internet since 2003, so when I founded my company in 2009 it was a natural choice. It has no inherent meaning, so it is uniquely my own.
I believe that by working on interesting problems, you can deliver the best results for the project. That means continuous learning and expanding your skill set. It also means looking for new challenges regularly, rather than always solving the same problem.
I enjoy empowering people. That can take many forms: automating business processes so people can do more with less time; creating framework code so other developers can do more with less time; setting up proper testing infrastructure, so code becomes more reliable and developers save time debugging.
I get invested in what I do. For this reason I expect clients to be just as committed to the project as they want me to be. The alternative is sadness for everyone involved, which helps nobody.
As a Dutchman, I am honest and straight-forward in how I communicate. When I say something sounds like a good idea, I mean it. When I think something is not going to work, I’ll say so.
As a professional open source software user, I believe that I have a moral obligation to give something back to the open source community.
I publish the source code of many internal tools on Github. These tools have helped me scratch my itches, so I hope they can be useful to others. Some of my collaborative work is published together with Gerard’s Govannon and under the umbrella of Beta Corp. Whenever I find missing features in software I use, I try to contribute back in the form of a pull request to add those missing features.
What can I do for you?
My preferred style of working is remote and asynchronous: it allows me to work where and when I feel most productive, which means you only pay for my most productive hours and not for the less productive ones.
Contact me to discuss what you want and how I can help.
Most of my experience has been on small teams with large responsibilities. This meant I’ve had to wear a lot of “hats” that would be full job titles in larger companies, but for me it’s always just been a part of what I do.
This broad experience helps me solve a wide variety of problems and enables me to speak the same language as a lot of other professionals.
A grab bag of things I have experience with, in case you are looking for something really specific:
Prior to my work as freelancer I worked for a startup company, yoMedia. I started as junior developer, quickly started mentoring interns and other juniors, which got formalized with my promotion to lead developer. I learned a lot, but ultimately my ambition pushed me to start my own company in 2009.
In 2022 I helped out the non-profit Questionmark to upgrade their two Ruby on Rails apps. Their budget was fixed, so my focus was on maximising the impact of my time. A couple of unmaintained gems were updated to extend Rails compatibility, so we did not have to migrate. For others, I found alternatives that had easy migration paths. The test suite was improved with parallel tests and stability improvements to reduce the impact of a couple of inherently brittle tests. Test coverage was added in a couple of places to minimize the risk of the upgrade breaking things undetected.
In 2020 we (Gerard, Rachid and me) took over maintenance and development of Reisbalans, a service which started in 2012 as Workaway.
Reisbalans offers companies a way to give employees a mobility budget, which employees can spend flexibly, instead of working with fixed travel compensation which may or may not be sufficient. From a software perspective it’s closely related to accounting software, in that there is a lot of bookkeeping and transaction processing happening.
As with all codebases that have existed for over 8 years, it has proven its commercial value but has also accumulated its fair share of technical debt. Our fresh perspective and high quality standards have led to rapid improvements in key areas.
Our plan had three components:
As of mid 2021 we were on step three of the plan, and expect to work on it for at least another year or two. We’re using the opportunity to help the company transition its infrastructure and processes from startup to scale-up, which includes:
My role has shifted from doing full stack work to cover whatever needed to happen (phases 1 & 2) to documenting a lot of internal systems (phase 2 & 3) to mostly handling maintenance and automation (phase 3).
In 2019, Gerard got Rachid and me a consulting project for Mobility Invest Group (MIG), the parent company of Mobiliteitsfabriek and Reisbalans. They were doing an internal assessment of strategic risks regarding their software systems and partners, and developing a vision for the future. We helped them get a better understanding of their software systems by conducting interviews with their developers to probe for their servers’ interconnectedness and state of maintenance.
When it came up, we offered our services in case one of their suppliers for Reisbalans would suddenly fall away. This risk turned into reality in 2020, so they called on us.
In 2019, Rachid asked me to help out on a project he was working on: Bottomline, a company which does route planning for fuel trucks. The assignment was to upgrade their three Ruby on Rails applications from and old version of both Ruby and Rails to the latest versions, to benefit from the latest security updates and bug fixes.
As a requirement for performing the requested updates responsibly, I setup a new testing infrastructure with Continuous Integration on CircleCI, using custom Docker containers to emulate their software landscape and writing a lot of RSpec tests to get to 95%+ coverage for their Ruby API code.
This project taught me that a lot of the low-level technical decisions made by developers can have a large impact on the business, and that having good lead developers is a key requirement for keeping both bug counts and technical debt low. Without lead developers to represent the interests of the software’s “health”, there is a risk that business feature requests keep piling up and individual developers feel like they have to cut corners in order to keep up. After talking with members on the business team, I helped them draft a job advert to find a lead developer for the team.
Near the end of 2017 Beta Corp started working on our first product, Panopta, in close collaboration with Nedap. Panopta was a tool to make it easier to register and process cases where privacy-sensitive information may have been leaked. We started beta testing this in January 2018 and went live just before the GDPR went into effect in May 2018. This will support companies in their GDPR EU privacy regulation compliance, and most importantly it will save them time (and thus money). We discontinued the product in 2019 because it turned out that despite it being the law, most companies don’t care about the GDPR.
I followed a training to become a Data Protection Officer (DPO) and have been studying the law and information surrounding it with an eye on offering consulting services in this space. As developer on Panopta I’ve architected and implemented internal end-to-end encryption to ensure that user data is always encrypted in a way that even we as developers could not access it. Privacy of our users’ data is our top priority.
In 2017 Gerard and I started Beta Corp, along with three other freelance developers, as a logical next step in our career. We did some projects together, but in the end a collaboration of freelancers proved to be akin to a herd of cats. Beta Corp was dissolved in 2019 and will be succeeded by a new company with Gerard, me and Rachid.
2017 started with an introduction into the world of international sea freight shipping, working for OTX on a platform that makes the life of freight shipping agents a lot easier than the old process where paper and spreadsheets were the tools they had to use.
In 2015 I turned my long-time hobby of video game playing into something more practical by starting a YouTube channel where I showcase games I like, and provide strategy guides and entertainment. It monetizes itself via ad revenue, and exposes me to a different side of the games industry. After creating over 1900 videos, I can say it has given me quite some practice in public speaking and improvisational speaking. This paid off when requested to give a workshop on GDPR compliance for small companies when working on Panopta (2018).
In 2013, I created LeadImprove as a side-project to make it easy to run some A/B testing experiments for customers. In 2015 it got repurposed to be an in-house tool for a customer, and they hired me to turn it into a Demand Side Platform (DSP), an OpenRTB Bidder service that participates in the high-volume, high-frequency auction process that takes places whenever you would see an advertisement on your phone or anywhere on the internet. My first prototype to explore the domain was built with Ruby (single process, multi-threaded, handling 800 requests/second/cpu core), after which the production version was recreated in Elixir (2016) to handle the 30,000 concurrent requests per second it needed to process. This taught me a lot about low level performance characteristics in both Ruby and Elixir.
In 2012, I took a brief dive into Foreign Exchange (Forex) trading, exploring the wonderful world of candlestick charts and programmatic trading. It’s fascinating, but there’s a lot of get-rich-quick temptation and speculation in there, and not a lot of solid fundamentals.
After doing some small crowdfunding projects, such as Africa Unsigned, in 2010 we developed Seeds, a crowd-funding platform for a major Dutch bank. The regular security code reviews and penetration testing were a nice form of external validation that we produced top-notch code. Working with a bank taught me that I prefer working directly with small teams and business owners, instead of having to deal with the internal politics of a very large corporation.
As a result of working on Seeds, Gerard and me worked a lot with Arthur van de Graaf, the Netherlands’ foremost expert when it comes to crowdfunding. We created the crowdfunding platform Leanfund together with him.
From 2009 until 2018 I’ve been working with Gerard on a multi-national mobile payment solution. It’s a high-volume, high-flexibility cloud of web services, designed to account for the fact that in Telecom all the rules seem to change every 3 months. The system has gone through a number of big changes due to business success and related scaling challenges.
We turned a website of a mobile content provider with a single payments provider (2009) into a payment system with five payment providers (2010), separated the business logic into a drag & drop business logic workflow builder based on visual programming principles (2011), reinvented the core payment solution into a plugin-based service suitable for handling multiple payment providers in over a dozens countries (2012), got serious about a responsive mobile front-end solution for multiple countries, multiple content types, and multiple payment types (2013), scaled the server architecture from a single physical server to a cloud of virtual servers, to accommodate millions of page views per week from around the world (2014), extracted a content management service from the plugin-based service, to separate codebases and load balancing needs (2015).
Supporting business decisions by doing Business Intelligence: it started with simple stats queries and custom dashboards, but eventually resulted in creating crucial tools such as: a cohort analysis with trend-based predictions, and automatic sales pattern-based outage detection in third party payment solutions (2016). We implemented end-to-end monitoring of the sales funnel and calculating performance statistics. We got good enough at monitoring and outage detection, that vendors often asked us to confirm if they themselves had an outage.
After nearly a decade of working with this client we felt we were outgrowing the opportunities available with them, so we parted ways after a year-long transition period where we trained a replacement team, chosen by the client, in India. They have since then contracted my services (2019-2020) to occasionally mentor their less experienced team members and tackle the tougher challenges.