Services

What can I do for you?

  • Ruby on Rails upgrades: is your team too busy to do this? Performing Rails upgrades benefits from the experience of a specialst, so calling me is a smart choice!
  • Improve your CI pipeline: Is your existing CI pipeline too slow? I can reduce the time your team has to wait for tests to be done, so they can stay in the flow and be more productive. (Note that a team of 5 developers with a 15 minute CI pipeline might be costing you 100 hours per month in wasted time.)
  • Setup a CI pipeline: want to ship less bugs, upgrade without fear, or lower the load of your manual test team? I can setup automated tests and have them run automatically after each code push. This helps developers find bugs before they ship. By adding minimum code coverage levels you can even remind developers when they forget (or “forget”) to add tests for their changes.
  • Routine Ruby on Rails maintenance: allow your team to focus on shipping features by offloading routine maintenance to me. I’ll triage dependency updates and solve easy upgrade issues, keep an eye on your test coverage and CI pipeline duration. Things which require more time/attention will result in a ticket/issue with a description and rough estimate. This allows your team to pick it up, or you can let me do it.
  • Backend development: need your API extended, or some internal process implemented? Want to start processing payments? This too is something I can help with.

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.

I’m located in Amersfoort, which is centrally located in The Netherlands.

Contact me to discuss what you want and how I can help.

About Narnach

My journey has not been typical, which is why freelancing suits me. My desire is to help people by solving their 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.

Wes Oldenbeuving-den Haan: casual on the left, in a suit on the right

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 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.

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 freelancers that I’ve worked with frequently throughout my career. Depending on availability and need, we can come in as a team.

My skills

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.

  • Automation engineer: I’m the person on the team who sets up your Continuous Integration, integrates tools to automatically scan for security vulnerabilities and code quality metrics, and who sets up Continuous Deployment. When automated tools fail for some reason, I’m the one that can dive in to solve the issue and (where possible) implement a long-term solution to prevent it from reoccurring. Is part of your application untested? I’m pretty good at writing automated tests to ensure the application keeps working the way you intended.
  • Senior Software Engineer: I’ve been programming for fun since the early 1990s, and professionally since 2006. That’s 16+ years of professional experience. It’s mostly been using Ruby, with a few years of Elixir and the usual splashes of JavaScript you’d expect. When I started, what I did was called a full-stack developer, because I did everything from writing CSS to Ruby to SQL to setting up the Linux server to host it on. Over the years my preference has shifted towards back-end development, because that domain is more objective than front-end development. I’ve worked on a number of greenfield projects and major systems redesigns, and did some architecture design there as well. It’s much cheaper to find fundamental flaws on a whiteboard than in deployed code.
  • Optimization: software systems grow in scope and complexity, companies get more customers and thus more data. Eventually this results in some aspects getting slower. A reporting page might have inefficient SQL queries that could benefit from an index or from a different approach. A script that runs every night might try to process so much data at once that it fills the server’s RAM. Your Continuous Integration pipeline might be slow due to the amount of tests that now validate 5+ years of new features. My broad experience allows me to jump into most parts of the software stack and try to figure out why it’s slow and how to solve it. Rewrite some code, rewrite some queries, or rearchitect part of the application because you’re processing more data now in a day than you did in your entire first year.
  • DevOps: I’ve setup bare metal servers from scratch, I’ve written custom software, and I’ve had to put my software on a server. I’ve worn the pager to get woken up in the middle of the night when servers were down. DevOps focuses on the automation of this process, and bridges these two worlds in a way that’s much better for the company than having two departments at odds with each other. Deployment automation is the first step, with database migrations, self-checks if required tools are present. Docker has made some parts easier (ensuring your image has all the tools you need), but has more complexity when it comes to live service orchestration.
  • Sales Engineer: taking a developer’s tools and applying it to the sales process. Instrument your prospect/lead/customer funnel, perform A/B tests, optimize marketing campaigns based on metrics. I’ve got a good feeling for numbers and processes, so this role suits me. This blends into Business Intelligence where you focus much more on extracting meaningful metrics from raw data to support business decisions (or even automate them). Customer lifetime value (CLTV) calculations, churn analysis, cohort analyses, and using anomaly detection in conversion metrics to detect possible outages at third parties. There’s a bit more user-facing output here than I usually create, but I do know my way around a spreadsheet and can setup a webpage with graphs.
  • Consultant: the fancy term for “getting paid to give advice”. My broad range of experience allows me weigh in on a wide variety of topics, especially when bridging the gap between two or more experts in different fields. I’m a great mediator who can help people realize they are solving a common problem, even when their lack of understanding of the other’s expertise makes it feel like they are adversaries.

Philosophy

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.

Open Source

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.

Project History

This is a list of projects I’ve worked on. I tend to update this when I’m looking for new projects.

Questionmark

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.

  • Keywords:
  • Automated testing
  • Backend
  • Continuous Integration
  • Rails Upgrade
  • Ruby on Rails
  • Ruby

Reisbalans

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:

  1. Quickly get up to speed on the code and business domain. We did this by integrating with the old development team for two months. We documented as much of this discovery phase as possible to allow future developers to get up-to-speed faster.
  2. Make the codebase “ours” by elevating the code to our standards and introducing the tools we have grown used to.
  3. Recruit a new in-house team and train them to take over from us, then gradually reduce our own involvement in the project.

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:

  • more standardized, automated and better documented codebases so developers can get up to speed faster
  • unified development and deployment pipelines with Docker and Kubernetes
  • supporting the implementation of ISO 27001 and ISAE 3402 certification to allow working with larger organizations which use and require these themselves

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).

  • Keywords:
  • Automation
  • Backend
  • Continuous Integration
  • Development
  • Documentation
  • Maintenance
  • Ruby on Rails
  • Ruby

Mobility Investment Group

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.

  • Keywords:
  • Consultancy
  • Documentation
  • Risk analysis

Bottomline

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.

  • Keywords:
  • Automated testing
  • Continuous Integration
  • Maintenance
  • Rails Upgrade
  • Ruby on Rails
  • Ruby

Mobile Payments: a decade of interesting challenges

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.

  • Keywords:
  • A/B Testing
  • Backend
  • Business Intelligence
  • Continuous Deployment
  • Continuous Integration
  • DevOps
  • Full-stack
  • Greenfield
  • JavaScript
  • Linux
  • Maintenance
  • Mobile website
  • MySQL
  • Non-Rails
  • Performance optimization
  • Ruby on Rails
  • Ruby
  • Software Architecture

Panopta

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.

  • Keywords:
  • Elixir
  • End-to-end Encryption
  • GDPR
  • Greenfield
  • Phoenix
  • Privacy
  • Workshop

Beta Corp - OTX

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, 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.

  • Keywords:
  • Backend
  • Maintenance
  • Ruby on Rails
  • Ruby

YouTube channel

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).

  • Keywords:
  • Gaming
  • Public speaking
  • Streaming
  • Video creation
  • YouTube

A/B testing & advertising

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.

  • Keywords:
  • Backend
  • Elixir
  • Greenfield
  • High performance
  • OpenRTB
  • Ruby on Rails
  • Ruby

Foreign Exchange

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.

  • Keywords:
  • Forex
  • Finance
  • Greenfield
  • Ruby

Crowd funding

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.

  • Keywords:
  • Full stack
  • Greenfield
  • Payment processing
  • Ruby on Rails
  • Ruby

Prior experience

Prior to my work as freelancer 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 this, 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.