Career Profile

My name is Tjeerd Verhagen and as a freelance Full Stack Developer / DevOps Engineer I have more than 20 years of experience. During my career I have always shown interest in all aspects of development. From initial customer need to running software in the production environment. Apart from the technical knowledge required for this, I am also interested in what methods there are to organize the work, how to get the most out of a team. If it happens that way, I like to give a presentation or workshop and thereby inspire others, so that they can make a flying start.

  • Full Stack Developer
  • DevOps Engineer
  • T-Shaped

  • Analytical
  • Accurate
  • Inquisitive
  • Inspire

Methods

Kanban; Scrum; Agile Manifesto; Extreme Programming; Test Driven Development; Clean Code; Specification by Example; Domain Driven Design; Anglo-Saxon Model vs Rhineland Model

Technology

Source Code Management; Issue Tracking; Code Review; Unit-Testing; Code Coverage; Code Metrics; Continuous Integration; Continuous Delivery / Deployment; Virtualization; Source Code Analyzing; Artifact Repository; Document Generation

Languages

Java 8/11; Python; TypeScript; Bash

Tools

Eclipse; Eclipse-Plugins; Git; GitLab; GitHub; BitBucket; Mercurial; Gradle 6/7; Maven 3; Maven-Plugins; TestNG; Mockito; JaCoCo; NodeJS; npm; Grunt; Angular; Jenkins Pipeline; Travis-CI; Artifactory; Nexus; SonarQube; XL-Deploy; XL-Release, Spring 4; SpringBoot; Jersey; Cucumber; Selenium; IBM WebSphere; Jboss EAP; Jetty; Nginx; Docker; Kubernetes; Nolio; VmWare ESXi; Vagrant

Operating Systems

OS-X; RedHat; Debian; Cent-OS; Ubuntu; Free-BSD; LTSP

Interests

OpenAPI (Swagger); AWS; Docker; Kubernetes; Kafka; MongoDB; OrientDB; Cassandra; NodeJS; Express; ElasticStack; Angular; Kotlin; SaltStack

Experiences

Senior Java Developer

January 2023 - August 2023
Swift, La Hulpe Belgium

As the logs flow from production to the back office, they pass through a Sensitive Data Scanner. This Scanner did require some maintenance, especially updating the Java and Kafka versions.

The setup of the project and the lack of (unit) tests, made it also hard to maintain and making changes in the code.

What did I do:

  • Introducing the Maven Module structure
  • Adding unit tests and mutation testing
  • Refactoring the code, so it became better testable
  • Solving issus in the code, so the vulnerability scans
  • Knowledge transfers, with other developer
  • Using git-repo with feature branches
  • Setting up the build in Cloudbees-CI Environment (Jenkins)
  • Set up creation of Docker image
  • Deploying the Docker image and it’s configuration with Ansible
    • Improving the Ansible deploymnt, so it’s more inline with other unix applications
    • Adding the log4j configuration, as part of the deployment (and no longer only in the jar)
  • Updating to Kafka version in production
    • Replacing deprecated Kafka features (branch -> split)
  • Updating to Java 17
  • Updating Maven dependencies and plug-ins
  • Improving configuration
    • Allow different formats (plain text, properties, json, csv)
    • Allow comments in the configurations
  • Adding some design patterns: Chain of Responsibility, Visitor, Fluent Interface
  • Removing duplicated code
  • Improving the creation of Kafka Topologies
  • Adding Feature Toggles for:
    • switching between implementations of topology models
    • sending output as avro record
    • sending output as json
  • Updating the logging, to use latest feathers of log4j2
  • Logging as json, instead of flat message
  • Using new features of the Java language and libraries
  • Improving the cli by adding Picocli
  • Adding version info, git hash as code in the build, so it can be used for logging during startup
  • Adding version info, of libraries used
  • Adding documentation
Technology Stack

Scrum / Agile, Java 17, Maven 3.8, (Gradle 8), Kafka 3.3, JUnit 4/5, Mockito, jsonassert, Cloudbees-CI, Nexus, Jenkins, SonarQube, NexusIQ, Synopsys Converity, Git, BitBucket, Confluence, Jira, Crucible, MatterMost, Teams, Docker, Ansible Tower, RedHat, Universal Base Image, VmWare

Developer

January 2022 - June 2022
CertiQ B.V. (TenneT), Arnhem

Cleanup implementation of functionality, no longer in use. Implement new business requirements.

Implement several business validations, in C# and TypeScript, which could then be used by the PowerApps application.

Technology Stack

Scrum / Agile, IntelliJ, Java 8, Maven 3, JBoss, LiquiBase, Jira, Confluence, FitNesse, Visual Code (TypeScript, C#)

Senior Java / Angular Developer

May 2021 - December 2021
Cipal Schaubroeck, Nazareth Belgium
  • Adding Lima functionality for the new 2022 DMFA (multifunctionele aangifte) rules from the Belgian tax office;
  • Importing data through batch import from Excel;
  • Importing attachments / avatars through batch import from Zip file;
  • Exporting data as Excel files;
  • Creating enum-generator-maven-plugin for generating source code based on database content.
Technology Stack

Scrum / Agile, Java 8, Maven 3, Git, GitLab, Junit 4, Mockito, Spring, Angular, TypeScript, Vagrant, Docker, Informix, DB-Viewer, IntelliJ, Jira, Confluence, Teams, Slack

Senior Java Developer

June 2020 - December 2020
Belastingdienst, Apeldoorn

During the conversion of the application Handmatig Opvoeren Betalingen, from WebSphere v8.5 to WebSphere v9.0, I’ve solved a nasty bug.

Initially I’ve been adding and updating existing Robot Framework scripts, but soon the question was asked if this is the best way to regression test the functional requirements. Also the learning curve for Robot Framework is quite high and maintainability quite hard. After setting up a POC for Cucumber as well as Karate API Testing, the team decided in favour of Cucumber. It looks better maintainable and is a lot developer friendly! An additional advantage, which was ‘discovered’ during the conversion of some initial Robot Framework test to Cucumber scenario’s, was the ability to debug!

Technology Stack

WebSphere 8.5 / 9.0, Scrum, SAFe, Java 8, Maven 3, Git, BitBucket, Jenkins Pipeline, Junit 5, Mockito, Cucumber, Selenium, Karate, Robot Framework

Senior Java Developer

September 2019 - December 2019
LexisNexis, Leiden

As team member of the Search Team, I simplified the Integration Tests, by using a locally launched (and stopped) Elasticsearch Node, through Maven. Instead of through a Docker instance. This makes it easier and faster. As well as easier to change to a newer version for testing.

Developed a Maven plug-in, which creates an Elastic script, for creating index, mapping and initial data filling.

Designed the architecture for a Time-Machine based File-Store as well as developed it, with use of Verticles from Vert.x (comparable with Actors in Akka). Through this implementation of the File Store, there are stable data sets available. Which is a great improvement for testing. There is a restful interface, which makes it possible to directly upload a specific set of documents into a specific Elasticsearch cluster.

Technology Stack

Vert.x, ElasticSearch, Java, GitLab CI, Maven, Maven Plug-in, Karate API Testing

Senior Java Developer

December 2018 - May 2019
LexisNexis, Leiden

The development of TotalPatentOne is in a crucial phase, as they like to replace the older TotalPatent solution by the new version. One of the most critical pieces, the TPO search language, contained several issues. As member of the search team, I was involved in defining the search specific grammar for patent documents. This search grammar is written in Antlr4. Based on the generated Antlr classes, we implemented the TPO query model, which is a tree model. This tree is then used by several visitors, for optimizing the tree, calculating search complexity, validating specific input details. And finally to create the ElasticSearch specific query.

Technology Stack

Antlr4, Spring-Boot, ElasticSearch 6, TDD, Scrum, Maven 3, GitLab, Junit 4, Mockito, Git, Karate

Infrastructure Developer

September 2016 - May 2018
Dienst Uitvoering Onderwijs (DUO), Groningen

As a member of the Continuous Integration and Delivery Deployment Team, there were a lot of challenges. As a team we were dealing with the transition from a green field project to a service delivery team. The green field project was set up to automatically roll out the new RedHat-based environments for all DevOps team within DUO. An important part of this is the Provisioning Self Service Portal, through which developers and testers can request and manage their own environment (s). This means that they have their own JBoss EAP instances at their disposal. Possibly supplemented with Static Content instances and database schema links. Where test data can be loaded if necessary.

  • Infrastructure as Code
  • Immutable Infrastructure
  • Infrastructure as a Service
  • Self-Service

Configured filebeat and logstash for additional logging from JMeter results in Jenkins. Giving testers easy access to the results. Involved in the upgrade from ElasticSearch 3 to 5 / 6 including additional tool stack.

Technology Stack

RedHat Linux 7 (500+ VM’s), JBoss EAP, Nginx, RedHat IPA, RedHat Satellite, Zabbix, Puppet, Elastic Stack, XL-Deploy, XL-Release, Jenkins master / slaves, Artifactory, SonarQube, HPE-Fortify, Subversion, Git, Gerrit, GitLab, Jira, Confluence, VmWare vSphere, VmWare ESXi, Docker, Microsoft Orchestrator, Maven, Java, AngularJS, Python, Bash shell scripting, IBM DB2, Redis

Solution Architect; Senior Java Developer; Coach

October 2015 - September 2016
Dienst Uitvoering Onderwijs (DUO), Groningen

Setting up integration tests on the basis of Specification by Example, within the Programma Vernieuwing Studiefinanciering (PVS) (Program Renewal of Student Finance), in the Integration Test Team. Developing a glue library, allowing setting up basic principle for the various integration tests. Give workshops to other team members, so they understand the new technology stack as well. Workshops DUO wide for mostly testers. With subjects like TDD, BDD and API testing in a Java environment. But also with things like use of Eclipse, Git, Maven 3, Jenkins.

Technology Stack

Agile, Scrum, Java, Cucumber, Git, GitLab, Selenide, Maven 3, Jenkins, Junit 4, Selenium, WebDriver, GitLab, Docker, CentOS

Parasoft Consultant

April 2015 - September 2015
Dienst Uitvoering Onderwijs (DUO), Groningen

Within the Programma Vernieuwing Studiefinanciering (PVS) (Program Renewal of Student Finance), as member of the Integration Test Team, investigate the possibilities to use Parasoft Virtualize, for simulating connected systems. This was for internal as well as for external PVS systems.

Technology Stack

Parasoft Virtualize; Parasoft SOATest

Senior Java Developer

August 2013 - March 2015
ING Bank, Leeuwarden

Our DevOps Team was responsible for converting ING backoffice web forms to the new technology stack. Together with the Product Owner, we were responsible for all aspects from initial requirements till running it production.

  • Building and testing of forms build with AngularJS;
  • Building and testing of Java Rest-APIs;
  • Building and testing of SOAP-service clients;
  • Deployen through DTAP environment;
  • Administration of the Team own Linux development server.
Technology Stack

Agile / Scrum, J2SE 7, J2EE 6, AngularJS, Maven 3, Jenkins, Junit 4, Mockito, Karma, Protractor, Eclipse, Git, Parasoft Virtualize, SoapUI, Jetty, JSON, Nolio, Debian

Senior Java Developer

June 2012 - June 2013

Design and development of various internet banking wizards, which are part of the ING internet banking web application. Both front-end development and connecting with backend system through Tibco web services.

  • Design, construction and testing of web applications in a Scrum team;
  • Deployment of the web application through the DTAP;
  • Improving the code issues that appear in the existing code in the Sonar / Fortify checks. Include refactoring as part of the daily activities;
  • Being part of the open-source projects within ING, similar to Eclipse / Apache open-source projects;
  • Implementing improvements in the local development environment and CI environment;
  • Manage the Team own Linux development server;
  • Writing documentation, about setting up a development environment.
Technology Stack

Agile / Scrum / XP, Java 6, Spring MVC, Spring WS, Nexus, Maven 3, Jenkins, Sonar, Fortify, Git, Junit, Eclipse, RSA, WebSphere, Jetty, Selenium, Fitnesse, Confluence, Jira, TDD, Continuous Integration, Continuous Delivery, XSD, XML, Web-Services, SOAP, JavaScript, Balsamiq, Debian

Mobile App Developer

December 2011 - March 2012
Leger des Heils, Almere

Implementation of the design, in several sprints, where each sprint demo showed the new additions and improvements.

Technology Stack

AppCelerator, Xcode, Android SDK, iPhone, iPad, Android phone, JavaScript, Balsamiq

Application Auditor

November 2011 - November 2011
Nederland Werkt Mee

This assignment was asked to do an audit of the already developed software. The audit paid attention to various points, including: performance (suitability for this purpose); price (production, license and management costs); amount of functionality realized. The audit report has been the basis on which various IT components have, or have not been taken over by Stichting NL (NL Foundation).

Technology Stack

PHP 5, Symfony 2.0, Doctrince 2.0, MySql 5.1, Zend Paginator, JQuery, MongoDB, Groovy, Liferay

Java Architect / Senior Java Developer

September 2011 - October 2011
Oxyme, Amsterdam

Providing advice on technical improvements to application architecture, particularly in the field of OSGi. Reduce the time to market, for the software developed. Daily deploments. Re-establishing Continuous Integration environment. Give advice on what to use for the Issue Management system and how to set it up. Activities:

  • Evaluate the architecture of the OSGi application;
  • Improve the design of the OSGi bundles;
  • Improve the Maven setup;
  • Setting up CI environment;
  • Advise on how to set up an issue management system;
  • Developing OSGi bundles, for new functionality;
  • Code reviews.
Technology Stack

Apache Felix, Apache Karaf, Spring DI, Spring DM, Spring ORM - Hibernate - PostgreSQL, JPA, Apache ActiveMQ, Wicket, Maven 2/3, Nexus, Jenkins, Jira

Senior Java Developer

March 2009 - January 2011
Asset-Control, Beetsterzwaag

In addition to the AC-Server, there are a large number of AC-Interfaces, with which financial data from data vendors can be loaded in the AC-Server in a standardized manner. The changes that the various data vendors implement in their product can have an effect on the corresponding AC-Interface. In addition to adjusting the various interfaces, Tjeerd has worked to improve the (automated) testability, improve the development process, improve the Continuous Integration and professionalize the accompanying documentation. Generating PDFs and HTML based on DocBook XML. In doing so, he wrote, among AC-Interface functionality, Maven-Plug-ins, Eclipse-Plugins and Junit extensions. With these JUnit extentions specific AC-Interface tests, could be run like Junit tests.

Technology Stack

Java 5/6, Maven 2, VmWare LabManager, DocBook, XSL, XSLT

Senior Java Developer

November 2011 - November 2011
Asset-Control, Beetsterzwaag
On Demand Asset Request Service

At the request of a customer, the On Demand Asset Request Service was developed. This service can be used to retrieve the details of an asset, based on a direct question, at one of the data vendors. Because high demands were made on availability and there was a high chance of changes, the modularity of OSGi was chosen.

Technology Stack

OSGi Equinox, Java 5/6, Maven 2

Continuous Integration Specialist

November 2011 - November 2011
Asset-Control, Beetsterzwaag
Setting up a new Continuous Integration Environment
  • Setting up the Hudson server;
  • Updating all project from Ant to Maven.
Technology Stack

Hudson, Nexus, Maven, csv

Senior Java Developer

December 2007 - November 2008
Asset-Control, Beetsterzwaag
AC-Desktop 3.x

The existing AC-Desktop was not user-friendly and had arisen from a technical approach. As a result, AC-Desktop 2.x was unnecessarily complex for the largest group of end users. The development of AC-Desktop 3 is based on the users who do data handling. The desktop is a Swing application, which connects to the AC Server. This allows the end users to gain insight into the financial data stored in the AC Server. Tjeerd has done both part of the development and looked at the continuous integration system. Until then, Ant was used in combination with Continuous Integration. In this project, the existing system was also used (trial run) with Maven, Hudson and Nexus.

Technology Stack

Java 5, Swing, Continues Integration, Ant, Maven, Hudson, Nexus

Continuous Integration Specialist

April 2007 - November 2007
Asset-Control, Beetsterzwaag
Setting up VM environment for integration tests

Setting up the automated test environment through VmWare LabManager. Using client images for the different environments. The software under test was automatically installed. Then the integration tests were carried out and the results were retrieved. These could then be compared from within the CI environment with previous results.

Technology Stack

VmWare Server, VmWare LabManager, Ant, Continuous Integration, MQ-Series, Sonic-MQ, WebSphere, Jboss, Oracle Application Server

Java Architect; Senior Java Developer

September 2006 - March 2007
Contrado, Groningen
Integraal Klantcontact KPN

Updating the existing application, which until then made of accessed multiple databases directly. The databases where replaced by other systems, which could be accesed by SOAP messages.

Technology Stack

Java 1.4/5, SOAP, Apache Axis 2, WSDL, Ant, Maven, commons logging, Jira

Senior Java Developer

April 2004 - August 2006
Contrado, Groningen

Participate daily in the construction of the Order Manager within the Scrum Team.

  • Automatic generation of Release Notes in the form of PDF and HTML. A part of the data was extracted from Jira. Each release of the Order Manager, therefore, also provided the corresponding Release Notes.
Technology Stack

Agile / Scrum, Java 1.4, Spring-DI, Spring-AOP, Spring-ORM, Hibernate, Oracle Application Server, cvs, Ant, Maven, DocBook, XML, XSL, XSLT, Jira, Apache Axis

Senior Java Developer; Continuous Integration Specialist

September 2003 - March 2004
KPN, Den Haag
Service Order Gateway

Based on the change request from the customer, adjustments had to be made to the Service Order Gateway (SOG) client application, in which Tjeerd functioned as a developer. To gain more insight into the functioning of the application, Tjeerd has made a number of UML diagrams of the application to supplement the existing documentation. With the knowledge and experience from previous projects with regard to automatic build and release processes, Tjeerd has implemented a number of changes, making it easy to compile, run and test the application both on the local workstations and on the server. Partly on the advice of Tjeerd during the project was chosen to change source version management tool, the choice is made for cvs.

Technology Stack

Java, Swing, cvs, Ant, UML

Java Architect; Senior Java Developer

October 2002 - July 2003
Shell
Pims

For PIMS, Tjeerd defined the architecture of this web application.The techniques to be used had already been recorded and consisted of Java, JSP, Tomcat and Oracle. Various open source components were added for such things as logging, database connection pooling, user input validation and unit testing. Furthermore, the MVC concept was chosen as the basis for the web application. POJOs were used to transport information within the application. These were generated on the basis of an XML schema. In the development use was made of open standards such as XML, XML schema, CSS and HTML 4. When designing the application, the viewed design patterns for web applications such as MVC, DAO, Plug-In were used as much as possible.In addition, the source code version management set up and introduced to the other team members. This supplemented with build, test and release scripts.

Technology Stack

Java 1.3, Apache Struts, Oracle SQLJ, Castor, XSD, HTML, CSS, Ant, Junit, cvs

Java Architect; Senior Java Developer; CI

March 2002 - September 2002
Delta, Middelburg
Middleware connection

The Tibco middleware consists of a number of basic products and an extensive range of standard adapters for various back-office systems. However, there is no standard adapter for the Cordaptix billing package. The technical design for this had to be made first. It was very important to get a quick insight into the functioning of the various back-office systems that sent Tibco messages towards Cordaptix. As a starting point for thecommunication with Cordaptix served the new interface based on XML-SOAP. When designing as much use as possible of design patterns noted in UML. The implementation has been done by means of Tibco adapter SDK. In addition, use was made of various open source standards and components, such as XML, XML Schema, FreeMarker, log4j, etc.

Technology Stack

Java, Tibco-SDK, SOAP, FreeMarker, Log4j, Cvs, Ant, UML

Java Developer

Sep 2001 - Feb 2002
Deutsche Börse, Frankfurt am Main

Java Developer

Sep 2000 - Jul 2001
Achmea, Apeldoorn

Java Developer; Tester; System Engineer

Apr 2000 - Jul 2000
OHRA, Arnhem

Application Design

2000
Genton, Groningen

Java Trainer

2000
Logica, Amsterdam

Java Developer

Sep 1999 - Mar 2000
Achmea, Apeldoorn

Java Developer

Jan 1999 - Jul 1999
KPN