Resume

 

I'm an experienced software engineer, author and trainer working as an independent software consultant.

I have significant experience in engineering and operating distributed systems at all levels of the stack, ranging from high-level architecture down to debugging issues at the kernel and network level.

Next to working on client projects I also like to write and talk at conferences. I wrote the book Reactive Web Applications (Manning Publications) about building web applications following the reactive system principles.

I studied telecommunications at the National Institute of Applied Sciences in Lyon which have provided me with a deep understanding of the nature of networks, signals and information theory.

I’m fluent in English, French and German.

Specialities

  • distributed systems
  • performance engineering
  • event-driven systems, CQRS/ES
  • actor systems
  • asynchronous programming
  • microservices
  • cloud infrastructure
  • devops

Technical skills

(this is an excerpt, see the details at the end of the resume)

  • JVM (Scala / Kotlin / Java)
  • Rust, C, Python, Go
  • Performance engineering, profiling, tracing
  • DevOps (terraform, ansible, kubernetes, CI/CDs)
  • Cloud (AWS / GCP / Azure)
  • Databases (relational / NoSQL)
  • Linux (Debian, Ubuntu, CentOs, Buildroot, etc.)

Work experience

Note: some engagements are under a NDA and are therefore not listed here. Other engagements are listed but the company is not identified and simply referred to as "Company".

 

02.2024 - 02.2024
Consulting
Consulting Cloud Infrastructure Engineer, Biome Diagnostics GmbH (life sciences)

Migration of an on-premise kubernetes deployment to Google Cloud Run.

Tools used: GCP, Google Cloud Run, Terraform, Kubernetes, Vault, Python

12.2022 - 12.2023
Contracting
Performance Engineer, Adaptive Financial Consulting (financial services and technology)

At Adaptive, I helped to benchmark the Aeron messaging platform on Amazon Web Services (AWS) and Google Cloud Platform (GCP).

During the course of the project, I:

  • built the infrastructure provisioning harness required to run the tests on two cloud providers with different scenarios and configurations
    • instance types
    • network topology and configuration
    • transport security (IPSec, Wireguard, etc.)
    • storage types
  • built an automation for rendering results (latency graphs, experiment parameters, etc.)
  • built an automation for provisioning infrastructure, running benchmarks in various configurations (peer-to-peer, cluster) and rendering results
  • assisted with the running of benchmarks, analyzing results and investigating performance issues

See the press release from AWS on the topic and the performance testing results are publicly available.

See also the article on achieving sub-20 microsecond performance on Google Cloud.

Tools used: AWS, GCP, Linux, Terraform, Bash, Performance Engineering, Python, Java

04.2022 - 11.2022
Sabbatical
Rust & Machine Learning Sabbatical, manuel.bernhardt.io (Research & Development)
  • self-study of the Rust programming language (books, online courses)
  • self-study of machine learning (books, online courses)
  • building prototypes to understand the concepts and tools
  • reading papers on distributed systems that I intended to read for a long time
10.2020 - 02.2022
Contracting
Tech Lead, Leap Energy (energy)

After watching the drone footage of San Francisco in burning orange skies due to wildfires, with the Blade Runner soundtrack playing on top of it, I decided to look for an engagement with a company helping to do something to address climate change. This is how I learned about Leap Energy which provides solutions for connecting distributed energy resources to wholesale energy markets in order to make the electric grid more resilient.

In the role of Technical Lead I focused on projects in the following two areas:

  • infrastructure modernization
    • migration of the self-hosted customized VPN server to a cloud offering (vendor selection, user migration)
    • migration of the self-hosted Kafka cluster to Confluent Cloud (vendor selection, data migration, integration with the monitoring system, service migration and coordinated roll-out)
    • migration of the self-hosted elasticsearch cluster to elastic cloud (vendor selection, data migration, service migration, coordinated roll-out)
  • microservice architecture modernization
    • introduction of ADRs in order to document architecture decisions
    • introduction of GRPC as a means for service-to-service communication (replacing direct database access across services and an experimental service-to-service communication via Kafka topics) between Spring Boot services
    • development of a service protocol registry and distribution mechanism (based on protocol buffers) to allow contract-first design and development of the various services
    • introduction of Gradle with Kotlin support as a build tool as a replacement to maven and porting multiple services
    • introduction of jOOQ as a replacement to Hibernate for database access

Tools used: Kotlin, Java, React, Typescript, Go, Python, Spring Boot, Microservices, Bash, Gradle, Maven, GRPC, Kafka, SQL, elasticsearch, logstash, filebeat, Terraform, AWS

Since 01.2021
Consulting
Consulting Distributed Systems Engineer, Company (digital media measurement and analytics)

Ongoing support of the engineering team with the implementation of Scala- and Akka-based microservices:

  • architecture and design reviews
  • code reviews
  • technical questions
  • performance engineering

Topics & tools: Reactive design patterns, Microservices, Distributed systems, Akka, Scala, Kubernetes, Helm

07.2020 - 09.2021
Consulting
Consulting Distributed Systems Engineer, Company (vertical farming)
  • review of the technical design of a single-node Akka application against the business objectives
  • support of the project team with regard to questions and issues arising during the project with regard to the usage of Akka and Scala

Topics & tools: Actor Systems, Reactive design patterns, Akka, Scala

03.2020
Consulting
Consulting Distributed Systems Engineer, Company (insurance telematics)

Architecture evaluation of an event-sourced system based on Apache Kafka and Kubernetes

Topics & tools: Event Sourcing, CQRS, Kafka, Kubernetes

02.2020
Consulting
Consulting Performance Engineer, SwissBorg (cryptocurrency technology and services)

Troubleshooting performance issues with an Order Management System (based on Akka Cluster, Kafka and Kubernetes) and setting up a large-scale load test for the system.

Topics & tools: Performance Engineering, Akka Cluster, Kafka, Kubernetes

10.2019 - 12.2019
Consulting
Consulting Performance Engineer, Paidy (financial services)

The onboarding of a new strategic client on the Paidy platform brought with it stricter latency requirements (in order to meet the agreed-upon Service Level Agreement). The backend application built on top of Akka Cluster with cluster sharding did not deliver consistent latency in redeployment and failover scenarios. I helped the engineering team find and understand the root cause of the latency fluctuations and guided them throughout the process of implementing a solution.

Topics & tools: Performance Engineering, Akka Cluster, Akka Cluster Sharding, AWS ECS

09.2019
Consulting
Consulting Distributed Systems Engineer, Delivery Hero (food delivery)

A core application based on Akka Cluster had ongoing memory issues, requiring to run virtual machines with a lot of memory (64+ GB) as a workaround. I held a performance engineering workshop to show the team how to use the adequate tooling for performance profiling and memory pressure analysis. A key result of the workshop was a tenfold decrease of the JVM memory required to run the project.

Topics & tools: Performance Engineering, Async Profiler, JVM memory management

12.2018
Consulting
Consulting Distributed Systems Engineer, SwissBorg (cryptocurrency technology and services)

Development of a template project for deploying Akka Cluster projects with Kubernetes

Topics & tools: Kubernetes, Akka Cluster

06.2018 - 06.2019
Contracting
Senior Software Engineer, MOIA, Payment Services (mobility)

I joined the Payment Services team at MOIA to help with developing the second version of the payment system based on Scala and Akka. The system needed to enable the payment of MOIA trips and needed to integrate with multiple Payment Service Providers while providing strong consistency as well as being highly available.

Tools used: Scala, Akka, Akka Cluster, Akka HTTP, Microservices, SBT, DynamoDB, AWS Kinesis, PostgreSQL, AWS

05.2018 - 06.2018
Consulting
Consulting Distributed Systems Engineer, MOIA (mobility)

Evaluation of the deployment of a split-brain resolution solution for Akka Cluster deployed with Kubernetes on Amazon Web Services (AWS). At this time, there was no official support for Kubernetes deployments of Akka and therefore I proceeded to analyze the deployment model with regard to different edge-cases that could occur in a split-brain scenario.

Topics & tools: Distributed Systems, Akka Cluster, AWS, Kubernetes, Helm

03.2018 - 09.2018
Consulting
Consulting Scala Engineer, Metaco (cryptocurrency technology and services)

I supported the engineering team during the initial development of the SILO platform (based on Akka Cluster and Scala) by:

  • reviewing the system architecture and technical feature designs
  • providing guidance and best practices with regard to the use of Akka Cluster, Scala and Kubernetes
  • developing the initial project scaffold and core application layer

Topics & tools: Reactive design principles, Actor systems, Akka, Akka Cluster, Scala, Kubernetes, Helm

03.2018
Consulting
Consulting Distributed Systems Engineer, Delivery Hero (food delivery)

Architecture review and code review of an Akka Cluster based application

Topics & tools: Reactive design principles, Akka Cluster

01.2018 - 03.2018
Sabbatical
Distributed Systems Sabbatical, manuel.bernhardt.io (Learning)
  • reading 50+ papers on the topic of distributed systems
  • basis for the talk Is there anybody out there?
  • basis for my personal research work in the distributed systems field
05.2017 - 12.2017
Consulting
Consulting Tech Lead, Company (telecommunications)
  • architecture of the new microservice-based software platform for an existing real-time communication platform
  • design and code reviews
  • hands-on development of the core feature set of the platform (based on Akka, Scala and Scala.js)
  • Cloud DevOps infrastructure on Azure

Topics & tools: Scala, Scala.js, Typescript, Akka, Microservices, Kafka, SBT, Terraform, Azure

08.2016 - 05.2017
Contracting
Senior Software Engineer, VCharge (acquired by OVO Energy) (energy)

This engagement was a direct result of my work on deploying Akka on the Raspberry PI (see also the initial article).

VCharge developed an embedded system and software solution to help address the issue of maintaining the stability of the electric grid in the presence of increasing renewable generation.

During this engagement I supported VCharge in:

  • building a new version of the low-latency backend service (based on Akka) responsible for aggregating telemetry as well as actuating the IoT devices at the core of the VCharge Grid network.
  • further development of the firmware driving the embedded IoT devices

Tools used: C, Buildroot, Bash, Scala, Python, Akka, elasticsearch, logstash, Kibana, Puppet, AWS

06.2016 - 10.2019
Consulting
Consulting Architect and Trainer, WireCard (financial services and technology)

Ongoing support of the engineering teams working on the next generation of the PSP (Payment Services Provider) core platform:

  • architecture reviews
  • design and code reviews
  • performance engineering workshops

Topics & tools: Reactive design principles, Actor systems, Event Sourcing, CQRS, Performance Engineering, Akka, Akka Cluster

02.2016 - 07.2016
Consulting
Consulting Distributed Systems Engineer, DIMOCO (financial services and technology)

DIMOCO initially approached me in order to develop a prototype for an architecture evaluation with Akka Cluster to help make a decision of which technology to use (the other contending technology was VertX). I developed a software prototype deployed on multiple Raspberry PIs to demonstrate the resilience and failover capability of Akka Cluster (unplugging a network cable while transactions were being executed and showing that the processing continues and no transaction is failing makes for a good demonstration).

Akka Cluster was subsequently selected as the technology to use for developing the new version of DIMOCO’s SMS delivery platform. I supported the engineering team in the early stages of the development of the platform by:

  • reviewing the architecture and the technical design
  • regularly reviewing the code
  • providing guidance and best practices with regard to the use of Akka and Akka Cluster

Topics & tools: Distributed systems, Reactive design principles, Akka Cluster, Kubernetes

07.2014 - 09.2016
Authoring
Author, Manning Publications (publisher)

Writing the book Reactive Web Applications. The book is the result of several years of experience designing, building and working with teams to build high-performant, fault-resilient web applications using the Play Framework, Akka and Scala. In a way, this is the book I wish I had had when I first started working with this stack.

Read more about the story of writing the book.

4000+ copies sold so far.

12.2013 - 03.2016
Contracting
Software Engineer, TalentHouse (digital marketing)

I joined the engineering team at TalentHouse in order to build the new version of the company site using the Play Framework and Scala.

Tools used: Scala, Akka, Play Framework, Javascript, elasticsearch, RabbitMQ, PostgreSQL, Heroku

07.2013 - 07.2016
Contracting
Software Engineer, Nexxchange (property management)

Nexxchange provides an all-in-one platform for managing Golf resorts and hotels.

I designed and implemented the online portal that aggregates the tee times of the multiple golf clubs, making them searchable and bookable.

See also the Reactive Golf article series part 1, part 2 and part 3.

Tools used: Scala, Akka, Play Framework, Groovy, Javascript, elasticsearch, MongoDB

07.2013 - 07.2016
Entrepreneurship
Tech Lead and Co-founder, Delving B.V. (cultural heritage digitalization)

Delving provided a SaaS offering for cultural heritage organizations (museums, libraries, archives) allowing them to bring their digital content online and make it searchable.

Tools used: Scala, Akka, Play Framework, Javascript, XML, SOLR, elasticsearch, MongoDB

02.2011 - 08.2011
Entrepreneurship
Tech Lead and Co-founder, Oxiras ApS (test automation)

Oxiras provided a SaaS solution for manual testing, akin to HP Quality Centre

Tools used: Scala, Play Framework, Javascript, Chef, SQL

11.2009 - 02.2011
Employment
Software Engineer, Austrian Institute of Technology, Digital Preservation (research)

As part of the Digital Preservation team at the Austrian Institute of Technology I took part in building software tools aiming at making digital assets accessible in the long term, such as:

  • building workflow engines with automated plans for data format migration
  • building tools to annotate digital media
  • etc.

Tools used: Java, Scala, Adobe Flex, CSS, Javascript, SQL

11.2009 - 02.2011
Employment
Software Engineer, T-Mobile Austria, IT Delivery (telecommunications)

As part of the eBusiness & CRM team at T-Mobile Austria I worked on the maintenance and development of the Order Management System for mobile phone tariffs as well as on a project to build the next generation order management system (Oracle Siebel, IBM Master Data Management)

Tools used: Java, SQL, Linux, Oracle Siebel

07.2007 - 12.2007
Employment
Software Engineer, Royal Institute of Technology (KTH), Human-Computer Interaction Lab (research)

As part of the team at the HCI lab at KTH I worked on software solutions for collaborative programming (see this paper)

Tools used: Java, Tomcat, Hibernate, ANTLR, SQL, Linux

09.2005 - 11.2013
Open-source
Committer, Makumba (open-source web framework)

Contributor to the Makumba open-source web framework for Rapid Application Development

Tools used: Java, Tomcat, ANTLR, Spring, SQL, Hibernate, Maven, Ant, Linux

Training course delivery

I’m a certified Lightbend Academy trainer and have delivered a number of courses on Akka and Scala.

  • 2020: Company (financial products and services): Lightbend Akka for Java - Professional
  • 2020: Deutsche Bahn Systel (mobility): Lightbend Akka for Java - Expert
  • 2020: Company (digital media measurement and analytics): Lightbend Scala Language - Professional
  • 2020: Company (digital media measurement and analytics): Lightbend Akka for Scala - Professional
  • 2019: Company (financial products and services): Lightbend Akka for Java - Professional
  • 2019: Lunatech (consulting), Netherlands: Lightbend Akka for Scala - Expert
  • 2018: WireCard (financial services), Germany: Lightbend Akka for Java - Professional (multiple times)
  • 2017: WireCard (financial services), Germany: Lightbend Akka for Java - Expert
  • 2017: WireCard (financial services), Germany: Lightbend Akka for Java - Professional
  • 2017: In cooperation with OpenForce: Lightbend Akka for Scala - Expert (public training course held in Vienna)
  • 2017: In cooperation with Trifork: Lightbend Akka for Scala - Expert (public training at Scala Days 2017 Copenhagen)
  • 2016: Deveryware, France: Akka Lightbend for Java - Professional
  • 2016: DIMOCO, Austria: Lightbend Akka for Java - Professional

Tools & Technologies

The following is an (incomplete) list of tools and technologies that I have experience with.

Programming Languages (in order of first use)

Sinclair ZX81 basic, Logo, QuickBasic, Turbo Basic, Turbo Pascal, Assembly, HTML, C, Bash, Java, SQL, Matlab, PHP, Perl, Javascript, Python, Action Script, Scala, Groovy, Typescript, Go, Swift, Kotlin, Rust

Frontend

  • Javascript, Typescript
  • AngularJS, React, Node.js
  • CSS

JVM frameworks and tooling

  • profilers and memory analysis tools: Async Profiler, YourKit, VisualVM, TDA (Thread Dump Analyzer), etc.
  • reactive libraries and frameworks: Akka, Akka Cluster, Akka HTTP, Akka Streams, Lagom, Play Framework, Kalix, Vert.X, RxJava, etc.
  • java libraries and frameworks: Servlet, JSP, JSF, Struts, Freemarker, Drools, Spring, Spring Boot, etc.
  • build tools: Ant, Maven, Gradle, SBT, etc.
  • database access: jOOQ, Hibernate, R2DBC, etc.

Infrastructure

  • basics: Linux server administration, Linux kernel compilation, bash scripting, etc.
  • linux distributions: Debian, Ubuntu, CentOS, RedHat, Buildroot, HypriotOS, etc.
  • infrastructure automation tools: Terraform, Packer, Chef, Puppet, Ansible
  • CI/CD: Jenkins, CircleCI, TravisCI, GitHub Actions, GitLab, GitOps, etc.
  • containers and container orchestration: docker, kubernetes, helm charts, nomad, etc.
  • monitoring / alerting: Nagios, Monit, Prometheus, Grafana, Datadog, etc.
  • logging: elasticsearch, filebeat, logstash, Kibana
  • cloud providers: AWS, GCP, Azure
  • networks: networking foundations, routing, firewalls, TCP/IP, UDP, DNS (it’s always DNS)

Databases

  • MySQL, Oracle, PostgreSQL
  • MongoDB, DynamoDB, Cassandra, Redis

Data / Streaming

  • big data: Hadoop, Spark
  • messaging: Kafka, RabbitMQ, Aeron
  • workflows: AirFlow, Temporal
  • search: elasticsearch, opensearch, SOLR, Lucene

Speaking / Conferences

  • I frequently give talks at conferences (Devoxx, Scala Days, GeeCon, JFocus, …) and user group meetings
  • I’ve been part of the Program Committee of a few conferences such as Scala Days, Reactive Summit and Voxxed Days

Writing

Personal Research & Development

Open-source project contributions

(see also on GitHub)

  • Contributions to Akka
  • Contributions to Play Framework versions 1 and 2
  • Committer for Makumba, a Web 1.0 framework for rapid application development
  • Smaller contributions to various open-source projects I used over the years