More time for fun.
My specialization followed the path from full-stack generalist to backend developer to focusing on making the team more productive. How do I do this?
I’ve setup a dedicated website for my Ruby on Rails maintenance services over at RoRMaaS.com, but if needed I can help you with some or all of these as part of a consulting contract that’s not focused on maintenance.
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. That said, two years of being forced to stay at home made me appreciate face-to-face contact with my clients and team members, so working 1-2 days per week on location is not an issue (when feasible).
I’m located in Amersfoort, which is centrally located in The Netherlands.
Contact me to discuss what you want and how I can help.
My journey has not been typical, which is why the flexibility of consulting suits me. My desire is to help people by automating the boring parts of their problems. I enjoy optimizing 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, full-stack Ruby on Rails developer since 2006 (16+ years of experience) 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 upgrade 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.
When building things I’m best at home on the backend side of the team, working on the most complicated parts of the codebase. I’m happy to help out brainstorming approaches and solutions for complicated issues.
My communication style tends to be information-driven and direct. In case of problems or conflicts I try to figure out why things failed or why people disagree, instead of looking where to place blame. I’d rather spend my energy on solving systemic issues or knowledge gaps to prevent issues from re-occurring.
My leadership style is non-authoritarian. I prefer to be the first among equals, a tie breaker when there is no obvious solution. I prefer letting everyone contribute their insight so we can figure out the best solution for our problem. My experience can be very valuable, but so can that of other team members.
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.
My expertise might not always be enough by itself, which is why I’ve got a network of experienced consultants that I’ve worked with frequently throughout my career. Depending on availability and need, we can come in as a team.
My curiosity points me towards interesting problems. My brain allows me to learn the skills required to solve them. This has led me learn a broad range of skills, and I’m not done learning yet.
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.
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. This is why I’ve setup a Github profile for RoRMaas, to continue this traditiion. Over the years I’ve contributed to projects hosted at clients and other consultants, so you’ll see 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.
This is a list of projects I’ve worked on. I tend to update this when I’m looking for new projects.
My years of doing maintenance on teams and desire to focus on this more exclusively has led to me launching RoRMaaS in 2022. It’s the service I’ve provided to clients for years, but packaged as a product without the additional non-maintenance tasks I’d typically do on regular consulting engagements. This allows people looking specifically for the service to better find it. The service currently consists of three complementary services: a monthly maintenance service, one-off Ruby on Rails Upgrades and CI Pipeline optimization as a No Cure No Pay offer.
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 perform time-intensive migrations. 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.
From 2009 until 2018 I’ve been working with Gerard on a multi-national private 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.
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 consultant developers, as a logical next step in our career. We did some projects together, but in the end a collaboration of consultants proved to be akin to a herd of cats. Beta Corp was dissolved in 2019, succeeded by a loose collaboration between Gerard, Rachid and me.
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.
Prior to my work as consultant I worked for a startup company, yoMedia (2006-2009). 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.
Prior to my professional career, I’ve been programming since the early 1990s. From QBasic and GWBasic, to C, to C++. I built my own little games and contributed to some open source roguelikes. I’ve built an administration system in MS Access. I learned PHP and MySQL for a school project, which I later used to build a Guild Wars fan website in 2004. I started with Linux in 1999, and have recompiled more kernels than anyone should do in their life. I studied Artificial Intelligence at the University of Amsterdam but despite being in the top of my class the lack of challenge disheartened me and led to me looking for more interesting challenges in the startup world. Long story short: I enjoy learning new things and solving problems. Programming has always been an interesting way to do this.