Skip to main content

VirtusLab's Articles

Backend Engineering|Jul 17, 2019

Implementing a server for the Language Server Protocol

In this article, we explain how to implement a Language Server Protocol server to decouple code presentation from language logic, using Metals and Scala. It walks through adding a simple document highlight feature. 

Implementing a server for the Language Server Protocol cover
Backend Engineering|Jan 30, 2019

On the missing package private — or why Java is better than Kotlin in this regard

Kotlin lacks Java’s package-private visibility, exposing everything by default unless explicitly marked, which can bloat APIs and hinder encapsulation. The author praises Java’s manifest-based modular exports for making visibility decisions more conscious and centralized.

On the missing package private cover
Scala|Nov 21, 2018

OOP vs. FP. The pursuit of extensibility part #1

VirtusLab compares object‑oriented and functional programming through the Expression Problem, showing how each paradigm handles extensibility differently. The article highlights how FP easily adds new operations, while OOP easily adds new data forms.

OOP vs FP cover
Cloud Engineering|Nov 2, 2018

Helm alternative

VirtusLab shows how to ditch Helm by converting charts into single Kubernetes manifest templates for full control. They demonstrate using their “render” tool to flatten, clean, and version your deployment manifests.

virtuslab-header
Cloud Engineering|Jul 10, 2018

Think twice before using Helm

VirtusLab shares concerns about Helm’s hype, especially around its Tiller component and templating complexity. They point out how it adds layers—like auth and templating—that often create more work than value.

Think twice before using Helm cover
Cloud Engineering|Mar 1, 2018

Kubernetes Cluster Bootstrap

This article by VirtusLab walks through how a Kubernetes cluster is provisioned from first principles, detailing the components and technologies involved in bootstrapping nodes and orchestrating services. It explains how bare-metal and cloud setups follow similar high-level steps.

Kubernetes Cluster Bootstrap cover
Backend Engineering|Oct 28, 2015

Arrows, Monads and Kleisli — part 1

A general abstraction extends functions into composable building blocks, enabling the expression of business logic as data flows. This shift transforms side‑effecting, exception‑ridden code into clean, purely functional pipelines.

Arrows Monads and Kleisli part 1 cover