A service-oriented architecture (SOA) is a common way to “decrease” the complexity of the software system by splitting it into several parts. I put “decrease” into quotes because actually the complexity always increases. Splitting the system into separate well-defined components is a logical extension of the splitting system’s functionality into domains. When a system becomes too big to fit stakeholders’ (engineers, product managers, etc) heads, the only way to handle its complexity is to split it into parts. Each stakeholder will then have detailed knowledge about its own part and can manage this part properly. Such separation doesn’t actually decrease…

Elixir/Erlang OTP abstractions enforce developers to split programs into independent parts. While “gen_servers” encapsulate parts of business logic on micro-level, “applications” present a more general (“service”) part of the system. Complex programs written in Elixir are always a collection of communicating OTP applications.

The main question appeared while developing such programs is how to split the complex system into separate parts. But the more important problem is how to organize communication between them.

In the article, I would share design principles I follow when creating more or less complex Elixir project. We will discuss how to split the project into…

Flowex is Flow-Based Programming framework built on top of Elixir GenStage library. It is a set of abstractions which allows writing program with Railway FBP paradigm. You can read more about Flowex in this post.

I’ve written a couple of posts about the library and had a few of talks on Elixir club and Pivorak meetups. And I’ve noticed there are two main questions that appear after one get aquatinted with Flowex.

1. Is it possible to design real applications in Railway-FBP paradigm that Flowex propose?

2. Does GenStages bring significant performance overhead to the application?

The goal of the…

Illustration by Darya Kozemchuk

When your application grows it’s a good solution to split it into separate microservices to handle the complexity. When you decide to extract some functionality into separate service(s) two problems appear:

  • How to organize communication between main application and service(s) in the way you don’t need to make lots of changes (code duplications) in different code bases.
  • How to test all the parts together to be sure you don’t have “interfaces mismatch”.

This article will present an approach for creating maintainable communication layer between microservices. …

In Flow-Based Programming (FBP) paradigm each component is an independent process — “black box”. Component only transforms input to output, and this transformation is independent of internal implementation. So in general components can be written in different languages and then linked together in a single network.

Ability to run alias code is very important for such new languages as Elixir. One can reuse tonnes of libraries from more mature languages and choose the specific language for the specific problem.

In this article, I’ll show examples of multi-language Flowex components. I will use Export library to run Ruby and Python and…

Flow-Based Programming

Having been a software developer many years, I’ve tried lots of programming languages with different paradigms: procedural, object oriented and functional. Last year I took a look at a completely different approach to program design — Flow-Based Programming (FBP) — a paradigm that defines an application as a network of independent processes exchanging data via message passing. FBP is a data-centered approach — when an application is viewed as a system of data streams being transformed by processes. …

Anton Mishchuk

Software engineer

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store