Software Engineering

At the core of our business is high-quality Software Engineering. It does not matter whether we apply it to data science, big-data crunching, or business applications, our high standards apply to all these domains equally.

When to use iterative development? You should use iterative development only on projects that you want to succeed.
— Martin Fowler, Chief Scientist, ThoughtWorks

We work with the best tools available, we can cover the full spectrum of a Software project — from planning and conceptual stage, to the project setup and bootstrapping, and production readiness.

We believe that full transparency is the only way for a mutual understanding of the various stakeholders and that fast feedback-loops are critical to successful Software projects.



Data Engineering

Data is at the heart of any Software project; we have built several data processing pipelines of various levels of complexity: From simple pipelines that ran in one process on one machine to fully distributed pipelines spanning over multiple programming languages, servers, and even data-centers.

We’ve seen products come and go, but we know the concepts that work and the techniques that are required to solve even the most challenging requirement.

Through data engineering, we employed big machine learning tasks (analyzing and classifying documents) in a scalable and cost-effective manner.

Information is the oil of the 21st century, and analytics is the combustion engine.
— Peter Sondergaard, Executive VP, Gartner


Architecture and Concept

Simplicity carried to the extreme becomes elegance.
— Jon Franklin, Science Writer

The most important part of a Software project is to get the foundation right. We have seen many good teams fail because the foundations were not up to the task. Unfortunately, changing the architecture of a project in a later stage is either very painful or as expensive as a full rewrite.

Having a thorough analysis of the requirements and the scaling demands of a Software project beforehand saves time and money in the long term.



Bootstrap a Team

Good practices and a good team culture don’t happen by accident. Creating an open, welcoming environment, proper supportive processes, and a professional environment takes time and experience. We learned that the hard way.

Adding manpower to a late software project makes it later!
— Fred Brooks, Turing Award Winner

When bootstrapping a project together with a team, we start to develop the foundation of the project or even the first production-ready version, while onboarding a team to hand it over. In-housing the accumulated know-how during an out-sourced project is the most neglected step when working with contractors, we actively want you to take charge of the project as quickly and professionally as possible.

 
 

Our Technology Stack

We believe that the choice of “the best tool for the job” is a balance between technological and social aspects. It does not make sense to introduce a new technology for each new project as the team that’s working on it needs to maintain and work with that piece of Software for a very long time.

Before Software can be reusable, it first has to be usable.
— Ralph Johnson, Research Associate Professor

We can work with a wide range of tools and languages, but for our projects, we usually use Java or Kotlin together with Spring (Spring Boot), Hibernate, and Liquibase as our go-to stack for the back-end, JavaScript or TypeScript in combination with Angular and Material for the front-end. When it comes to data analytics, we rely on Python with NumPy, Pandas, and Matplotlib libraries (i.e., the SciPy stack).

R is an excellent tool for exploratory data analysis too, it has its place in our rotation, yet we prefer Python’s way of doing things.

We store terabytes of data in PostgreSQL, and order of magnitudes more in Elasticsearch.

For storing and working with large amounts of data, we rely on PostgreSQL as a general purpose database with strong consistency guarantees and amazingly powerful features. Of course, in an enterprise context, working with Oracle is quite common too, so we know our way around Oracle also. When it comes to search and large-scale data analysis, we usually rely on Elasticsearch to store, index, and process (semi-) structured data. We’ve built systems that store terabytes of data in PostgreSQL, and order of magnitudes more data in Elasticsearch.

For the services we operate on our own, we like to use Hetzner for bare metal, raw power, infrastructure. The price and quality provided by Hetzner are astonishing, and they proved to be a reliable partner over the last decade. If the infrastructure requirements are less demanding, we use Heroku on top of Amazon AWS to run and operate our services. Data analytics is done on Microsoft Azure as they provide powerful analytics APIs ready to use.

We do not shy back from other languages and tools if they are necessary (like Swift/Objective-C for iOS development) or when they provide value or are part of our client’s request. We live and breath Linux and the Unix philosophy every day, it is not only the basis of our infrastructure, it even powers our desktop computers as well.