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.
Related Post: Retry Pattern: examples & recommendations
Insight: The 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.
Related Post: The Circuit Breaker
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.
Related Post: Creating, Using & Building a DSL
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é.
Related Post: Feature Flag pattern in Java
Insight: It 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.
Related Post: Be more functional in Java with Vavr
Insight: A 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.