Containers all the way through...

In this post I will attempt to cover fundamentals of Bare Metal Systems, Virtual Systems and Container Systems. And the purpose for doing so is to learn about these systems as they stand and also the differences between them, focusing on how they execute programs...


Cohesion - The cornerstone of Software Design

Cohesion is one of the most important concepts in software design. Cohesion is at the core of the vast majority of good design principles and patterns out there, guiding separation of concerns and maintainability. The term cohesion (alongside coupling) was first introduced by Larry Constantine...


Docker meets Continuous Deployment

About one year ago I had my first contact with Docker. This new kid on the block promised to relieve our poor computers from installation of all tools, languages, dependencies and operating systems. Isolated run environments emerged on developers' computers. While my ops teammates chose...


Open Financials

Early this month we took a big step towards full transparency and decided to open the financials to the whole company. Our decision is aligned to the open-book management concept. Why did we do that? The short answer: it was the right thing to do....


Command Prompt Envy

I'm spending my time between Mac OS and Windows, and when I go back to my Windows machine I always feel the lack of my Mac command prompt. Almost a year ago Amir posted how you can get a nice command prompt on a Mac....


Coupling in distributed systems

Coupling and cohesion are key quality indicators. We strive for systems highly cohesive and loosely coupled, but high doesn't mean pure. The same goes with functional programming, we aim for isolating and reducing side effects, but we need them unless we want a useless system....


Isolating integration tests and mocking dependencies with Spring Boot

Integration tests can be slow and unreliable because they depend on too many components in the system. Up to a certain point, this is unavoidable: integration tests are here to validate how each part of your system plays with other internal or external components. We...


Premature Microservices

Building your app from the very start as microservices is not a great idea! Their deployment is complex - regardless of how good your microservices infra is. They create boundaries in your application that resist change. Software applications are complex systems and complex systems are...


GitHubAnimator

The Beginning Inspired by my friend @SamirTalwar and the initiative he set upon himself to automate the world I picked up on an idea I had many months ago. Automating the generation of presentations using GitHub commits. What Problem am I Trying to Solve? Often...


Clojure VIM Environment

The Cursive plugin for Clojure is now out of its beta testing phase. I have been using it throughout its beta program and, I must say, it is pretty good. Sure, the refactoring capabilities are not quite on a par with those of IntelliJ for...


Latest Tweets