Who reviews the Pull-Requests?

Pull-Requests are a mechanism to notify others about changes to a branch that you want to merge. It is often used in combination with trunk-based development, where you let your teammates know that your changes are ready to be merged into the trunk. Open-source software (OSS) uses this mechanism too because the requester usually does not have permission to merge directly.

But Pull-Requests are more than a notification mechanism. They can raise awareness in the team about some specific feature, spread knowledge between teammates, and even exercise control over what is merged. It is a mechanism for collaboration.

However, to make this collaboration work, you need someone to review your Pull-Requests. In OSS, this person tends to be the codebase owner, and yet it could take them days or months to review your changelist. In the corporate world, where teams are of different sizes, things could get more complicated to find the right person for review.

Continue Reading…

Creating a deployment pipeline using TeamCity and Octopus Deploy

Nowadays it is essential to be able to deploy to production in a reasonably short amount of time and in an automated manner. In this post, I want to summarize my experience with creating deployment pipelines and I will try to provide as many details as possible, despite the broad topic. I will focus on two concrete tools I have used in the past years – TeamCity and Octopus Deploy, which have helped me create automated deployment pipelines.

Continue Reading…

Ode to versioning

Unless you keep your programs only for yourself, you would want to give them a version. Versioning is a popular technique where a unique version number is assigned to a program to denote a specific state of the code of that program at a specific time. A version number is used as a reference to what the program, as a deliverable, includes in terms of functionality. This reference is expressed in words that your users would understand. Furthermore, if your users experience a problem, you could try to reproduce it on that same state of the code.

There are many versioning schemes that dictate how to generate new version numbers. When trying to implement continuous integration (and delivery), though, you may face some challenges. In this blog post I will try to explain some of these challenges and what options there are.

Continue Reading…

Load balancers can much more

Load balancing is a popular technique when you need to be able to serve thousands and more concurrent requests in a reliable manner. Load balancers distribute incoming network traffic across a group of backend servers (a.k.a. server pool or server farm) to increase throughput. Although many people associate load balancing primarily with the higher throughput, this technique can be used in other important scenarios as well.

Load balancing

Continue Reading…

The power of feature toggles

Many organizations employ a complex deployment process where every code change has to go through a series of different steps in order to reach the production environment. This is typically due to organizational rules, which require many people to approve the deployment. The result is a big package with many updates to the code that is supposed to be deployed at once. At deployment time the level of stress rises drastically, as there often are unexpected errors – missing configurations, misunderstandings in the team, or special (not well-tested) scenarios. Moreover, if the deployment fails, it needs to be rolled back, which could be a painful process.

Long deployments process

Continue Reading…