I can help you throughout the entire development process

Plan

For the planning phase of a development cycle I can offer extensive knowledge regarding:

  • Agile development
  • Kanban
  • Scrum
  • ITIL
  • Atlassian Jira

Code

Often combined with building tools like Ant, Gradle or Maven (see next phase), the IDE (Integrated Development Environment) is the toolbox used by developers to improve their effectiveness and obtain the best working conditions and source code insight. Examples of such tools include Eclipse, Netbeans and IntelliJ IDEA that all have plugins allowing them to understand and use the building tool of choice and the source code revision system used like Git or Subversion.

Separating source code modules are best performed using DI (Dependency Injection)
or an IoC (Inversion of Control) container like Spring, Guice or CDI. With these is is easy to organise the source code in logical structures that facilitates good programming practices like layered architecture, object-oriented programming, source code reuse and other software design patterns and principles.

When handling data it is often beneficial to introduce an ORM (Object-relational mapping) technology to map objects in the source code to and from a proper representation in a relational database. For Java this have been introduced in the JPA (Java Persistence Architecture) and where introduced based on Hibernate which where the first framework to introduce such functionality.

For handling and modifying XML content a dedicated tool can be used in addition to the tools included in the IDE. A good choice is XMLSpy that I prefer over most other tools when handling files containing XML, XSD, XSLT, XPath, and WSDL.

For the coding phase of a development cycle I can offer extensive knowledge regarding:

  • Java
  • Jacoco
  • Apache CXF
  • Git
  • Hibernate
  • J2EE
  • J2SE
  • Spring
  • Spring Security
  • XML
  • XSD
  • Eclipse
  • IntelliJ IDEA
  • Netbeans
  • Subversion
  • XML Spy
  • ORM (Object-relational mapping)
  • Atlassian Jira

Build

For building tools there are a number of considerations to consider prior to choosing the right tool for the organisation or project at hand. At one end of the scale there are pure configuration where Ant is the tool of choice at the other end there are pure convention where Maven is the predominant tool. For those that would like the flexibility offered by the former combined with stability offered by the later the solution would often be Gradle as this attempts to combine the best of both worlds.

For the building phase of a development cycle I can offer extensive knowledge regarding:

  • Apache Ant
  • Gradle
  • Maven
  • LiquiBase
  • Flyway

Test

For the testing phase of a development cycle I can offer extensive knowledge regarding:

  • JUnit
  • Selenium
  • SoapUI
  • Cucumber
  • TDD (Test Driven Development)
  • BDD (Behavior Driven Development)

Release

More than just release management this is where communication and handover from DEV/QA to the operations team is central.

For the releasing phase of a development cycle I can offer extensive knowledge regarding:

  • Jenkins
  • TeamCity
  • Artifactory
  • Ivy
  • Nexus
  • Continuum
  • Bamboo

Deploy

Central orchestration of servers are imperative as soon as you reach a critical amount of servers and complexity in your infrastructure. It is essential that you have solution where servers are defined and provisioned by a centrally managed orchestrator.

For this I have experience in orchestrating several hundreds of servers using both Puppet and Ansible – both of these are based on the declarative programming language paradigm where you describe the desired state of a server after the orchestrating solution have been invoked.

Combining these tools with a local hypervisor like VirtualBox and Vagrant provides a strong alliance when developing these scripts and being able to trigger the solution with either Jenkins or TeamCity even allow exposing vital handles for everyone in the organisation.

For the deploying phase of a development cycle I can offer extensive knowledge regarding:

  • Puppet
  • Ansible
  • SaltStack
  • VirtualBox
  • Vagrant
  • Jenkins
  • TeamCity

Operate

Operating servers and solutions is largely a matter of understanding the possibilities and limitations involved in the technologies chosen for the solution. For both servlets and databases understanding the the memory footprint is the key to understanding which technology is better in the situation at hand.

For servlets and containers there are several possibilities to consider: at one end there are the solutions with low memory footprint like Jetty that is outstanding when performing the mandatory unit – and integration-testing. At the other end there are solutions with a larger memory requirement like JBoss and Weblogic that are better suited for real production-grade environments. In between these we have the Tomcat servlet container that combines both, and provides a tool suited for production-grade environment with a smaller memory requirement than the full JEE implementations.

Likewise for databases there are simple in-memory databases like Derby and Hsqldb that provides great tools for unit – and integration-testing. At the other end we have production-grade DBMS (Database Management System) like Oracle and PostgreSQL that are outstanding for this purpose, however these are also very resource intensive and requires vast amount of free resources. In between these extremes we have solutions like MySQL/MariaDB that attempts to merge the best of both worlds.

In addition to running these services it is imperative to understand how these integrate with each other and with other systems. For this a central messaging service like Apache ActiveMQ is often involved and Apache Camel is the de-facto standard used for handling communication between heterogeneous as well as with homogeneous systems.

For the operating phase of a development cycle I can offer extensive knowledge regarding:

  • Apache ActiveMQ
  • Apache Camel
  • Java Message Service (JMS)
  • Debian
  • Linux
  • MySQL
  • Oracle
  • Apache Tomcat
  • Enterprise Service Bus (ESB)
  • Jetty
  • SOAP
  • Varnish

Monitor

Once a solution is put on the production environment it is critical that there are tools attached that allows feedback to developers and operations alike. In general two groups of monitoring tools are available for this end: surveillance and trending.

Surveillance are tools that continually monitor the solution and are able to trigger warnings in case a critical situation arises that is beyond what the solution can recover from itself – traditionally this task have been delegated to surveillance systems like Nagios.

Unlike surveillance trending actually have history and statistical details to forecast potential problems before they escalate into a critical situation for the surveillance system to discover, in case the solution fails in performing a safe recovery. An example of this is the ability to forecast scaling considerations like insufficient server resources for this end Munin is an excellent choice of tool.

For the monitoring phase of a development cycle I can offer extensive knowledge regarding:

  • Nagios
  • Munin

Want to hire my services or do you simply have an idea, that you need help with?

Most of the time I am full-time allocated to companies that have requested my services. With this in mind I am curious if you have any part time projects and ad hoc tasks that needs to be done outside normal business hours.

If you need me to work remotely I am able to conduct work from my own office in central Jutland (Western Denmark), which is also the central location from where I travel to customers in the immediate vicinity for working.

Please contact me for options regarding geographical relocation to other parts of Northern Europe or Central Europe during weekdays. It is also possibly requesting my services part time on location, and part time working from my own office.

If you have an idea for a technical project and wonder if it is viable for your startup company, but are lacking technical know-how and knowledge to prove it, I do offer my experience and knowledge on a pro bono (without payment) basic until your concept proves its viability – however it is essential that this can be done outside normal working hours (e.g. in the evening or on weekends) and I am kept free of any related expenses.

Contact me

My knowledge stack includes, but is not limited to, the following technologies: