@tdeekens avatar
tdeekens / curriculum-vitae

Curriculum vitae

Profile

Retired basketball player, lousy guitarist but also developer, avid teacher and spontaneous speaker with a strong experience in frontend development and architecture. Feels great joy in mentoring while working with diverse teams in agile environments. Likes early involvement in product ideation to support Product Managers and stakeholders to make more balanced decisions. Over time broadened knowledge of the tech stack by gaining practical experience in building robust and well tested frontends while also working on associated RESTful and GraphQL APIs. Additionally, knowledgeable in continuous integration and deployment strategies with backing infrastructure such as Prometheus, Kubernetes, Kibana and Grafana.
Always has been an Open Source enthusiast and is a contributor to msw, DOMPurify and creator of flopflip and promster.

Work experience

Remote Principal Engineer at commercetools from Vienna, Austria March 2022 - now

An increased focus on frontend architecture across all teams ensuring that architecture evolves with organisational growth to enable teams to develop and deploy their frontends autonomously with as little coordination as possible.

Remote Frontend Tech Lead at commercetools from Vienna, Austria January 2020 - February 2022

Transitioned into being a fully remote Tech Lead of all frontend related topics for six teams across Europe and the United States. Involved in defining hiring and staffing plans, quarterly planning and cross-team engineering efforts. During execution mentors engineers across teams in different areas of the tech stack. Sets long-term vision and goals collaboratively with engineers and product managers while guiding and communicating their execution.

During my time at commercetools the engineering team grew from ten to about 70 engineers while the company now has about 360 employees. The product, an headless e-commerce API, managed to attract more than 200 customers. Such as large enterprises from Lego, Volkswagen, Yamaha, AT&T, Bang & Olufsen, Quantas and Universal. In the process commercetools went through various rounds of funding and a 1.9B dollar evaluation.

Responsibilities

  • Hiring: setting and communicating long-term staffing and hiring plans for the engineering department growing the group from four to sixteen engineers.
  • Onboarding: defining organisation wide onboarding goals for frontend engineers in all teams. Enabling and easing the continuous growth of the department.
  • Planning: contributed to quarterly roadmap planning for six development teams. Aiming to help to make delivery as predictable and calm as possible.
  • Technology: setting technical visions for the department enabling long-term stability of delivery.

Tasks

  • Guided the implementation of a testing strategy allowing continuous deployment of ten independent frontends owned by various teams. Increasing the deployment velocity from a weekly cadence to multiple times a day.
  • Setup a recurring democratic Open Source donation model for projects used by various projects inside the company. Allowing commercetools financially support various projects.
  • Managed a budget for all external services such as Sentry, CircleCI and Percy used by various teams.
  • Setup and steered a frontend chapter consisting of six members meeting to guide execution of cross-cutting technical concerns across teams with product managers.
  • Contributed to the long-term structure in the engineering department from each team's responsibilities to roles within and across teams.

Senior Software Engineer at commercetools from Vienna, Austria April 2017 - January 2020

Working as a Software Engineer focussing on JavaScript across the stack within a cross-functional team building an internationalised, customisable web application for e-commerce merchants allowing administration of complex and large scale product, category, order, discount and customer data.

Working on the frontend and nearby REST & GraphQL APIs of the Merchant Center built with React, Apollo and Redux while being tested with Jest, react-testing-library and Cypress. Additional infrastructure includes but is not limited to webpack, prettier and react-storybook. The application follows a sub application architecture allowing easy extensions and parallel development and deployments by multiple teams in a test-driven and pull request based development environment on GitHub. Continuous Integration is performed via CircleCI with development branches being automatically pushed to a Kubernetes cluster. Additionally supporting the Node.js and JavaScript SDK team.

Responsibilities

  • Onboarding: onboarding frontend engineers across 3 cross-function teams.
  • Hiring: defining code challenges and interviewing potential hires.
  • Code Reviewer: being responsible for reviews of both internal and external developers.
  • Collaboration: defining processes and tooling for style guides to support seamless design and development collaboration.

Tasks

  • Introducing feature toggling via LaunchDarkly with the self-written flopflip library. Allowing more frequent deployments and beta testing of features with collaboration with selected customers product managers.
  • Migrating Frontend and Node.js monitoring from Influx to Prometheus and Grafana with the help of promster. Increasing observability of the platform to increase its health but also enable auto scaling.
  • Introducing and advocating prettier for automatic code formatting. Simplifying and speeding up code changes while removing discussions around code formatting.
  • Migrating the JavaScript SDK to a Rollup based build via CircleCI. Sppeding up Continuous Integration but also enabling an automated release process without needing a local machine.
  • Adding a dual deployment workflow to AWS and GCP onto a Kubernetes cluster with Helm into six production environments.

Tech Lead & JavaScript Developer at Brandwatch from Berlin, Germany March 2016 - March 2017

Working as a JavaScript developer within a agile team building great web-based software for comprehensive social network data monitoring and analysis.

Working on frontend and related backends powering browser based data visualisations of social media data from various sources. Activities include the implementation of performant and reusable visualisation components using Backbone.js as well as maintaining a large, highly interactive and customisable dashboard UI. All with a focus on Continuous Integration and Continuous Delivery in a test-driven and pull request based development environment using GitHub and TravisCI.

Responsibilities

  • Tech Lead: aligning architectural decisions with remote teams.
  • Teacher: giving small internal tech talks to share knowledge.
  • Code Reviewer: being responsible for reviews and all code merged to production.
  • Backlog: interim Product Owner defining the backlog and leading grooming and reviews.

Tasks

  • Migrating a ~100k SLOC project from RequireJS to webpack.
  • Replacing bower with npm in the main product's code base.
  • Helping code modding from underscore to lodash.
  • Implementing an Instagram OAuth2 integration allowing to build visualisations with Instagram data.

After the layoff of the whole Berlin engineering team I had to unexpectedly move on to new opportunities.

Frontend Engineer at E-Post Development GmbH from Berlin, Germany September 2014 - March 2016

Working as a frontend developer within a cross-functional team developing Single Page Applications. Furthermore focussing on frontend architecture, tooling and testing to increase developer experience.

Duties include architecting and implementing the next version of the E-POST Portal which has been successfully launched. An application built of multiple separate frontends, interacting with several backend services. Furthermore, helped simplifying and rebuilding registration processes while being heavily engaged in UX discussions. A heavy focus on developer experience lead to building multiple mostly open sourced build-tasks while also maintaining modern development stacks across projects.

Responsibilities

  • DX: project setup and developer tool management.
  • Workshops: giving frontend workshops to mitigate the grap between frontend and backend.
  • Hiring: defining code challenges and interviewing potential hires.

Tasks

  • Improving frontend performance in a legacy UI.
  • Setup of frontend verticals tied to backend (BFF).
  • Managing rollout of new frontends from beta to live.

After the successful launch of the next generation E-POST portal I went on to seek working in a more international environment with a larger scale product.

Thesis work at Ericsson AB in Gothenburg, Sweden February 2014 - June 2014

Investigating Ericsson’s adoption of organisational structure in regards to communication flow and blockages relating to the empowerment of cross-functional teams. A full version be found on GitHub.

Summer job at Scandio GmbH from Munich, Germany July 2013 - September 2013

Scandio GmbH is a medium sized web consultancy firm. Working as a PHP and JavaScript developer mainly extending and maintaining Scandio’s Open Source portfolioin scandiojs,lmvc andlmvc-modules. Also engaged in daily development working with Drupal and Solr.

Internship at zweitwerk GmbH from Hamburg, Germany April 2012 - October 2012

Continuation of work after finishing bachelor’s thesis. Evolving the previously designed prototype developing a data administration application. Gaining more experience with modern web development using HTML5/CSS3, JavaScript and related frameworks such asBackbone.js, martionette.js and jQuery. Also partly worked on daily development of other products.

Thesis work at zweitwerk GmbH from Hamburg, Germany April 2012 - October 2012

Combined experience in working at zweitwerk while performing research and writing on a bachelor’s thesis. The thesis entailed a systematic comparison of NoSQL (BigTable, Dynamo and MongoDB) and SQL (MySQL and Oracle) databases while performing benchmarks and developing a backend angostic proof-of-concept prototype of a product database for their media asset management system.

Student Assistant at Universiät Bamberg May 2009 - April 2010

Working on project Cadena in designing and implementing a Software as a Service supporting elderly care services build upon Adobe Flex®, ActionScript, Flash Media Server and PHP (Zend backed). The application’s features included video conferences between care service and a retiree and administration of clinical records. My duties included implementation and testing of a PHP-based backend as well as working on every part of the frontend. c

Technology experiences

Programming languages

  • JavaScript (advanced)
  • PHP (advanced)
  • Scala (intermediate)
  • Java (intermediate)
  • ActionScript & MXML (intermediate)
  • Objective-C (basic)
  • Python (beginner)
  • Elixir & Rust (goof-off)

Technology stacks

  • React, Redux & Apollo, AngularJS, Node.js, Backbone.js, Express and HapiJs: (JavaScript)
  • Kubernetes, Prometheus, Kibana and Grafana: (Operations)
  • CSS3, PostCSS, Stylus, SASS and LESS (CSS & Preprocessors)
  • MySQL, SQLite, PostgreSQL, MongoDB, Solr and Redis (Databases)
  • Webpack, Next.js, Rollup, Gulp, Grunt, SBT and ANT (Build Tools)
  • Jest, Cypress, Jasmine, Mocha, Sinon, GitHub Actions, CircleCI, TeamCity, Jenkins and Coveralls (Testing & CI)

Side projects

promster - A Hapi & Express Prometheus exporter

A Express middleware (or Hapi plugin) to easily export request timing metrics from an Express/Hapi application to Prometheus. The library contains few but powerful abilities to configure e.g. labels or to perform normalisation on measured values.

flopflip - Real time feature toggling: through LaunchDarkly in React and/or Redux via HoCs

A library with multiple packages in a mono-repo (maintained with lerna) offering Higher Order Components (HoCs) and other utilities to enable easy feature toggling of React components (supporting single- and multivariate flags). A version for Redux (via a store enhancer) integrates nicely with the Redux DevTools. Another standalone React version using a broadcasting mechanism allows integrating the library within any React application.

DOMPurify - A DOM-only, super-fast, tolerant XSS sanitiser for HTML, MathML and SVG

Contributor for DOMPurify which is written in JavaScript and works in all modern browsers (Safari, Opera (15+), Internet Explorer (10+), Spartan, Firefox and Chrome - as well as almost anything else using Blink or WebKit). It doesn't break on IE6 or other legacy browsers. It simply does nothing there. Helping to ensure code quality for setting up and maintaining continuous integration via TravisCI and BrowserStack in 8 different browsers.

Colloq - A playground: four NodeJs services with GraphQL in front

A pet project with the domain model of a conference and its attendees, speakers and organisers. Build with a NodeJs service for each entity and with a GraphQL (Apollo Stack) server in front. Technologies included in this project is: GraphQL, HapiJs, Ava (testing), XO (linting), nodemon, Docker and PM2.

react-memoise - Declaratively memoise a computation in a React component

Expensive computations should be memoised. In React projects memoisation is often performed imparatively whereas it could and likely should also be declarative within the tree of components. React-memoise enables this through an render-prop based API.

tamesy - Tames a set of wild concurrent promises by a concurrency limit

Tamesy exposes a map function to map over a set of Promises or a iterator factory with a given concurrency. It returns a Promise which resolves to an Array whenever all tasks have ben run. The order of items is maintained - same as in the list of factory functions passed. It is built using webpack as a UMD module and runs on Node.js or in the browser as CommonJS, AMD, ESM or as a global.

dactylographsy - A set of tools generating manifests with fingerprinted assets to be injected and cached

Every unit of an application can create a custom manifest listing all assets it consists of. These assets will be injected into the page while their contents will be cached when they are once loaded. After the cache (local storage) is filled it serves all files on any subsequent page load to speed up the initial load time. The caches might be invalidated at runtime by making a comparison between old and eventually new manifest(s).

Blog posts, talks and workshops

Talks & Posts

Courses

  • Shortcut to Tech Leadership: Accelerate Your Journey From Maker to Multiplier (Tech Lead Academy)
  • Time Management for Technical Leaders (Tech Lead Academy)
  • Functional Programming Principles in Scala (Coursera)
  • Introduction to Kubernetes (edX)

Conferences

  • TestJs Summit, JSConf Budapest and KubeCon
  • JSConfEU, GraphQL Conf and PromCon
  • microXchg, zeit.day and GraphQL-Europe
  • Bed-Con and ReactiveConf
  • Reject.js, Beyond Tellerrand and DotJS & DotCSS

Extracurricular activities

Basketball and sports

Been actively engaged in teams and clubs since the age of nine playing in many cities and countries. Helping clubs, taking over coaching at times and just enjoying being around a team while playing at a high level. Recently been focussing more on guitar than basketball.

Guitar and music

Picked up the guitar as an autodidact learning to play for four years now.

University education

Gothenburg University (Chalmers), Sweden September 2012 - September 2014

Master of Science in Software Engineering

University of Keele, United Kingdom September 2010 - April 2011

Study abroad year

University of Bamberg, Germany October 2007 - March 2012

Bachelor of Science in Information Systems