About Narnach

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, an experienced full-stack 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.

Team

You can hire me as an individual freelancer, but I prefer 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.

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.

My skills

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.

  • Back-end developer: 10+ years full-time experience with Ruby on Rails, 2-3 years of part-time experience with Elixir
  • Database Administrator: Strong SQL skills (MySQL focus), database design, database optimisation, data migrations
  • Test Engineer: Writing unit tests, functional tests, integration tests, test coverage monitoring, static analysis to improve code quality
  • Build Engineer: Run tests with each git code push, automate the build process, end goal is Continuous Integration
  • Release Engineer: Use Capistrano or similar tools to deploy code, ensure tests pass before deployment, end goal is Continuous Deployment
  • Site Reliability Engineer: monitoring server clusters for performance, bugs, security vulnerabilities and uptime; recovering from outages
  • Sales Engineer: setup sales funnel analysis, setup A/B tests, optimise campaigns
  • DevOps Engineer: combination of Build/Release/Site Reliability Engineering
  • Linux system administrator: experience with various flavors of Linux (preference: Debian, Ubuntu, historic: Gentoo, RPM hell), core skill required for DevOps
  • Software Architect: design one or more software systems to solve a problem
  • Front-end developer: can get the job done but not my favorite part of the stack
  • Business Intelligence Analyst: create custom reports for business metrics or to visualise technical stats; create cohort analyses, customer lifetime value calculations, churn analyses; create & run custom queries, create spreadsheets with visualisations and more custom calculations; automate all of this and create web-based interfaces to support non-technical colleagues to obtain all of this information without my help.
  • Consultant: a bit of a catch-all for when I’m focused more on solving problems by communicating and empowering others, rather than doing “the work” myself. This is where I develop the business itself.

Buzzword bingo

A grab bag of things I have experience with, in case you are looking for something really specific:

  • Programming languages: Ruby, Elixir, JavaScript, TypeScript
  • Linux server software: Nginx, Apache, HAProxy, Redis, Memcached, Cron, Sphinx & much more
  • HTML: HTML, SLIM/Jade, HAML, Erb, Eex
  • CSS: CSS, SASS, SCSS
  • JavaScript: Vanilla JavaScript (ES5, ES6), TypeScript, CoffeeScript, jQuery, basic understanding of React
  • DevOps tools: Puppet, Ansible, Docker, Kubernetes, Bash scripts
  • Databases: MySQL, Percona, Galera Cluster, PostgreSQL
  • Version control: git (my choice since 2007)
  • APIs: creating APIs, integrating with APIs, REST, SOAP, GraphQL
  • Business Intelligence: A/B testing, conversion analysis, cohort analysis, chi-squared tests, revenue projection, accounting basics
  • Business skills: business plans, revenue sources, profit/loss calculations, marketing basics, social media usage for reach, promoted posts and optimising this.

Project History

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.

Mobile Payments: a decade of interesting challenges

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.

Crowd funding

After doing some small crowd funding 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 crowd funding. We created the crowd funding platform Leanfund together with him.

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.

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.

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

Beta Corp

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.

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.

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.

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

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

We’re currently on step two of the plan, and expect to work on it for at least another year or two, depending on how quickly step three goes.