Techniques

Insight: The main benefit of using Javascript (Typescript) in the backend is that frontend developers that are already used to the language have the ability to switch to backend without having to learn a new language. At Apiumhub we have used Javascript in projects like Agora Images, AXA & Nestlé among others.

Insight: The benefit of using a monolithic architecture is the cheaper approach in terms of CI/infrastructure/repository management. This can always be evolved into microservices if the monolithic backend is well done, using DDD for example. Agora Images project is a good example of monolithic architecture.

Related Post: Many small Monoliths

Insight: Requests temporarily fail for many reasons, with this pattern we can handle this transient failures, trying to retry the request giving a retry strategy. Currently Retry Pattern is implemented in projects such as EY & Ayoba.

InsightThe Circuit Breaker pattern prevents an application from continuously attempting an operation with high chances of failure, allowing it to continue with its execution without wasting resources as long as the problem isn’t solved. Also, this pattern can detect when the problem has been solved so the compromised operation can be executed again. In a way, we can see this pattern as a proxy between our application and the remote service that’s implemented as if it was a state machine that mimics the behaviour of a switch in an electrical network.

Insight: DSL has two main benefits. The most common benefit is that they make certain kinds of code easier to comprehend, which makes it much easier to modify, thus improving programmer productivity. This is worthwhile all on its own and is relatively easy to achieve. At Apiumhub we used DSL for Allnow Europe project.

Insight: In Apiumhub we love Hexagonal Architecture.It is an architectural style that moves a programmer’s focus from conceptual layers to a distinction between the software’s inside and outside parts. Hexagonal Architecture promotes the separation of concerns by encapsulating logic in different layers of the application. This enables a higher level of isolation, testability and control over your business specific code.

Insight: In Apiumhub we use it a lot. Feature flagging enhances continuous delivery by allowing the separation of feature rollout from code deployment. Incomplete features can be merged into the production codebase but hidden behind feature flags. Feature flags allow you to toggle a feature on or off at any point of time. Without this technique the CD is almost impossible. A featured use of Feature Flag is the project we did for Nestlé.

InsightIt is important, when it comes to valuation, to be very clear about the objectives and problems that need to be resolved with a transition to microservices, for example, fast builds at component level, manageability of projects, very clear and rigid boundaries, deployment independence and quality of service, possibility of polyglot programming/persistence.

Insight: TDD is in the center of any software project we work on. We believe that writing the tests first requires you to really consider what do you want from the code. It allows you to receive fast feedback. TDD forces you to write small classes focused on one thing and creates SOLID code. TDD makes your project maintainable, flexible & easily extensible. A good example of TDD benefits is Grifols project.

Insight: Monads provide their own data type, which represents a specific form of computation, along with one procedure to wrap values of any basic type within the monad and another to compose functions that output monadic values. This allows monads to simplify a wide range of problems, like handling potential undefined values, or keeping values within a flexible, well-formed list. With a monad, a programmer can turn a complicated sequence of functions into a succinct pipeline that abstracts away auxiliary data management, control flow, or side-effects.

Insight: Memento is a pattern design with the goal of stacking an object’s state at a given time. Also, memento pattern is used to restore state of an object to a previous state. As your application is progressing, you may want to save checkpoints in your application and restore back to those checkpoints later.

Insight: Vavr was invented with the mission of reducing the code making it more readable and adding robustness with the immutability of the data. Vavr among other things includes immutability in lists and functions to work with them, it also includes some of the monads most used in other languages, more functional, currying and partial application in functions.

InsightA good software system has low coupling, which means that changes to one part are less likely to propagate through the rest of the system. A further benefit of low coupling is that components are easy to replace and, potentially, reuse.

Insight: An architectural fitness function checks the architectural quality attribute in an objective manner. An example: the unit test suite tests the software matches the business expectations in terms of features. Another example: a test can be set up to check that no circular dependency exists. This test is atomic, automated, static. Another example: The build cycle time is below twice the average build time. This test is holistic, automated, static. Kipit is a proper project example of implementation of Fitness Functions.

Languages & Frameworks

Insight: Scala provided a great integration with Kafka streams as well as all the libraries that could be reused from Java. That and it’s Functional-OOP nature made Scala a good choice for the projects we worked on (for example All-now Europe).

Insight: Kotlin provides a perfect interoperability with java, facilitates the immutability, productivity and makes the Functional paradigm easier than Java. Kotlin is our Backend Language recommended as we used for many projects such as Privalia, Bwom & Nestlé among others.

InsightPHP is highly flexible. It was a natural upgrade for Dexeus since their code was ASP. The migration to PHP was easier than it would have been to rewrite to any other language. We also have used PHP for Carnovo, Privalia, Bwom & Typeform.

InsightA coroutine is a concurrency design pattern that you can use to simplify code that executes asynchronously. Good examples of using Coroutines in projects are Agora Images, AXA & Fotoraporto.

Insight: ORMs give us a convenient manner to handle databases avoiding some boilerplate. They make the code easier to update, maintain, and reuse as the developer can think of, and manipulate data as objects.

Insight: Symfony was conceived from the start to be fast, with a strong emphasis on performance. Symfony is adaptable. Its dependency injector and the Event Dispatcher make it entirely configurable, with each of the bricks being fully independent. At Apiumhub we have used Symfony for Carnovo.

InsightDeno is upgraded newer version of Node.js. And it is based around Security as its first principle.