Elegant code solutions

Profile

  • business_center Elegant Code Solutions B.V. (KVK nr: 88812952)
  • person Wessel W. Bakker
  • place Zaandam (Amsterdam area), or anywhere when working from home

Full-stack DevOps engineer. Enthusiastic about building stable, maintainable, secure and elegant solutions using modern technologies and principles such as:

  • Functional and typesafe programming with Scala or Kotlin
  • Automated deployment pipelines (pipelines-as-code)
  • Using the cloud services and docker containers
  • Using open-source software and conforming to industry-wide standards.
  • Agile, independent and responsible teams that make the effort to continuously improve.

As a technical team lead I like to encourage healthy discussions and sparring to find the best solution, as well as to improve the team's understanding and buy-in of the decided solution. I feel responsible for the team's success and will pick up any task that is necessary.

My energy comes from working on varied problems, with interesting technologies and a committed group of colleagues.

Experience

Baker, Bakery and Negative Interest Rates

January 2022 - Now | ING Bank

Summary: Baker is an OSS Library/framework for orchestrating (micro)service-based process flows (see here).
These process flows are defined using a java/kotlin or scala dsl. Baker can execute these flows with an in-memory (cats/cats-effect) runtime for quick and stateless processes, or an akka cluster based runtime for persistent processes which can be long-running. Since operations for akka clusters need specific knowledge, bakery was developed. This allows our team to operate all the akka clusters, while exposing it as a service for other teams. Bakery is part open source, but our team also maintains an ING specific implementation using ING frameworks.

Role:

  • Thinking of and developing new functionality.
  • Assisting other teams with their baker/bakery APIs (both new and existing baker/bakery users)
  • Operations for our bakery clusters (deploying new versions, resolving incidents)
  • Upgrading several consumer APIs to a newer versions of bakery with improved architecture (V2 to V3).
  • Helping bakery users with testability and improving service stability by providing both interactive and standardized kibana dashboards for their corresponding clusters.
  • Improving azure devops yaml pipelines to be more safe and automated.
  • Doing secure code reviews.
  • Working on a new API (which uses baker/bakery) for making sure negative interest rates are calculated on a per-customer level, instead of a per-account level. Apart from delivering business value, it's helpful to use your own product (baker/bakery).
  • Migrating code from Java to Kotlin.

Technologies: Scala, Kotlin, Java, Akka, Cats, Cats-effect, Spring, Maven, Sbt, Baker, Azure Devops Pipelines, Docker, Kubernetes, OpenShift, Angular, Typescript, NPM, NodeJS.

ING App - Onboarding

April 2021 - December 2021 | ING Bank

Summary: New ING android app feature for becoming a new customer at ING.
The feature identifies the customer using a face and passport scan, requests user information such as phone number, e-mail address and the product the user wants to open. Helps reduce traffic to physical branches, as well as giving new potential customers the onboarding experience they expect.

Role:

  • Refining and developing new functionality.
  • Bridging the knowledge gap between frontend (Android/iOS) and backend (API) developers/teams.
  • Doing secure code reviews.

Technologies: Android, Kotlin, Gradle, Azure Devops Pipelines.

Open Mass Current Accounts

March 2019 - March 2021 | ING Bank

Summary: Frontends and backend APIs for opening new consumer payment accounts in the My ING environment, by branch employees or backoffice employees.
The APIs orchestrate the process of checking product and personal eligibility, requesting an iban, the payment account, the my ing account, billing, debit card(s).

Role:

  • Refining and developing new functionality.
  • Leading technical alignment meetings where we discuss technical improvements for our area in Amsterdam.
  • Simplifying codebase, improving unit and cucumber tests, improving the maintainability of the codebase.
  • Improving CI/CD pipelines, making them faster, more automatic and more robust.
  • Migrating our components from a Gitlab, Jenkins, TFS, Ansible and RHEL VM environment to a Azure Devops Pipelines, Docker, Openshift/Kubernetes environment.
  • As a so called 'Security Champion' reviewing code for common security issues.
  • Investigating and resolving issues, often spanning multiple teams.

Technologies: Java, Kotlin, Spring, Maven, Gitlab, Jenkins, TFS, Ansible, Baker, Elm, Azure Devops Pipelines, Docker, Kubernetes, OpenShift.

SalesApp

January 2017 - February 2019 | Randstad Groep Nederland IT

Summary: An application for supporting and empowering sales consultants to find and communicate to customers. Enables the consultant in planning sales trips, customer call days and receiving customer orders.

Role:

  • As the team's tech lead and most experienced team member, taking the lead in figuring out which technologies, libraries and architecture to adopt, and which not to adopt.
  • Representing the team when there are technical matters to be agreed upon between our team and other teams.
  • Investigating and solving complex issues that arise, preferably involving team members to spread out knowledge and preventing single persons becoming a bottleneck.
  • Refining user stories and working on architecture.
  • Developing frontend, backend and deployment script code.
  • Operations work and third line customer support.

Technologies: Scala, Play! framework, Typescript, Angular 2-7, RxJS, SBT, Rest, MySQL, GIT, Gitlab, Jenkins, Akka streams, Google maps, Linux, Python 3, SAML, OAuth, gradle.

AWS: RDS, Elasticache, S3, ELB, EC2, Kinesis, Elastic Search, EKS (kubernetes)

Design Chapter

Q1 2017 - Q2 2018 | Randstad Groep Nederland IT

Summary: The design chapter together with the IT Director were responsible for architecture, technology choices and inter-team agreements. The design chapter consists of the most senior members of the different teams.

Role:
  • Representing the team in team multi-team architecture questions.
  • Collaborating with other members to set up and improve inter-team/company-wide agreements, policies and processes.
  • Working on company-wide research and design on behalf of the design chapter.
    In particular:

    Data ownership/mastership policy

    More and more teams work independently and data is spread across teams and components. What are the responsibilities of being an owner of data? Together with the IT director I prepared a workshop to discuss within the design chapter what these responsibilities are. Based on these discussions I created a document, which after review by the members of the design chapter became the data mastership policy document. This document describes in a very practical way the responsibilities of being a data owner. It includes things like which documentation is required, functional and technical requirements for services, how to handle changes and how to comply to security and privacy regulations.

    Aanvragen architecture

    Randstad Groep Nederland has a large monolithic legacy application. There is a push to split the monolith into smaller applications to handle subsets of business-related and administrative processes. I've been working on moving the part of the monolith that handles talent requests (in dutch 'aanvragen' = a requests from a company to randstad for temp workers). One thing complicating this effort is that the 'aanvraag' in the monolith has been also used for a things that are fundamentally different. This means that different types of 'aanvraag' in the monolith need to go to different new systems. I've talked to the different parties to find out which parts need to go where, what systems need to be changed and how.

    Kafka (proof of concept)

    In a small team, we looked at what is needed to be able to use Kafka. We've tried hosting it ourselves in AWS, and also looked at different suppliers for SaaS solutions. With this information we made a recommendation.

Aanvragen Applicatie / JaApp

July 2015 - Februari 2019 | Randstad Groep Nederland IT

Summary: An application for the sales consultant to register and administer orders (or 'aanvragen' in dutch) of the client.

Role:
  • Helping design the architecture of the application that was going to replace the existing proof-of-concept.
    More specifically
    • Considered the short-comings of the current situation, the business ideas for the future and technical trends within the company and in the industry to develop a list of technical criteria.
    • Used these technical criteria to evaluate possible frameworks and technologies.
    • Created a small POC for the top contenders and decided the frameworks and technologies to use.
  • Becoming the team's tech lead in March 2016, after the then most senior developer leaving and starting a new team.
  • Developing and maintaining backend services, frontend web applications, databases and data-pipelines.
    More specifically
    • Developing reactive, fault-tolerant, stateless applications and rest services.
    • Developing front-ends using a combination of Play! and AngularJS.
    • Deploying and maintaining amazon web services such as MySQL databases, EC2 instances and Elasticache.
    • Developing data-pipelines using akka-streams, decoupling our applications from its peers.
  • Developing zero-downtime deployment scripts for continuously deploying the resources mentioned above to AWS, becoming one of the first development teams to be responsible for both dev and ops.

Technologies: Scala, Play! framework, Javascript, AngularJS, SBT, Rest, SOAP, MySQL, GIT, Gitlab, Jenkins, Akka streams, Linux, Python 3, SAML, gradle.

AWS: RDS, Elasticache, S3, ELB, EC2

Digitaal declareren

April 2015 - August 2015 | Randstad Groep Nederland IT

Summary: Rebuilt a section of the application for administering time sheets. The web-application is now mobile-first and provides a good user-experience.

Role: Backend application development. Designing the user interface. Designing services layout.

Technologies: Java, Spring, Hippo, Java servlet pages (jspx), SOAP, XML, SVN, Jenkins, Maven.

Rebuild MWP to the Hippo CMS

January 2015 - March 2015 | Randstad Groep Nederland IT

Summary: Rebuilt a host of web application pages from Oracle ADF into Hippo (currently called Cloudreach) components.

Role: Backend application development.

Technologies: Java, Hippo, Spring Framework, JSP/JSF, SOAP, SVN, Jenkins, Maven

MWP: Oracle ADF 11g → 12c migration

October 2014 - January 2015 | Randstad Groep Nederland IT

Summary: An upgrade of the MWP application (described below) from Oracle ADF 11g to 12c.

Role: Individual project, backend development

Technologies: Java, Oracle ADF, Spring Framework, JSP/JSF, SOAP webservices, SVN, Jenkins, Maven

BAD

June 2014 - September 2014 | Randstad Groep Nederland IT

Summary: An application in support of a new business idea. The business idea was discontinued rendering the application obsolete.

Role: Backend application development.

Technologies: Java, Oracle ADF, Spring Framework, JSP/JSF, SOAP webservices, CSS, SVN, Jenkins, Maven

Sollicitatieportaal

December 2013 - June 2014 | Randstad Groep Nederland IT

Summary: Built a backend application for handling incoming job applications.

Role: Backend application development.

Technologies: Java, Oracle ADF, JSP/JSF, Business Components, SVN, Jenkins, Maven

Metropool Web Portaal (MWP)

March 2013 - June 2014 | Randstad Groep Nederland IT

Summary: Web application for clients and people who work through Randstad/Tempo-team/Yacht. The application contained many different features like logging hours, calling in sick for employees, or approving hours and requesting a candidate for clients.

Role: Backend application development, working on the service bus, creating releases

Technologies: Java, Oracle ADF, Spring Framework, JSP/JSF, Oracle Service Bus, Oracle SQL, SVN, Jenkins, Maven

University courses

2006 - 2012 | Vrije Universiteit Amsterdam

Summary: Took several technical courses in Java, SQL, Network programming (in C), C++. Built an application in C# for comparing commercial off the shelf applications for my Master thesis.

Technologies: Java, SQL, C, C++, C#

Personal projects

pre-2012
Summary: Before developing applications professionally I created several applications for personal use.

Replay reporter

As a beta tester for a game (Dota) and was supposed to make a report after every test game. This application extracted some information from the replay, made a screenshot and used this to create a report automatically.

GHOST++

Personalized a warcraft 3 bot, which also hosted games.

StreamRipper

An application to download radio streams and split them into smaller parts so that I could put them on my mp3 player.

WebpageMp3Downloader

An application that looked at a webpage and downloaded all the mp3 files on that website.

LanOverInternet

An application that sent fake UDP multicast packets so that you could play a game that was meant for playing on LAN over the internet.

UDPTunnel

An application that connected to the same application on another computer and tunneled all UDP traffic so that you could play certain LAN games over the internet.

MW2AntiLamer

Used packet sniffing and sending fake incorrect data to a modern warfare 2 server so that a certain player (cheater) would be kicked from the server.

Technologies: Visual Basic .NET, C#, C++, TCP/IP, UDP, WinPCap, Windows Forms, Windows Presentation Foundation

Education

Master: Information Sciences 2010 - 2012 | Vrije Universiteit, Amsterdam & Logica, Amstelveen
Bachelor: Informatie, Multimedia & Management 2006 - 2011 | Vrije Universiteit, Amsterdam
VWO with Informatica and Managment & Organization 2000 - 2006 | Saenredam College, Zaandijk

Contact

Do you see an opportunity? Don't hestitate to contact me on LinkedIn!