Understanding Error Handling in Integrated Solution: Making things robust

<p class="wp-block-paragraph">Integration engineering regardless of the architectural style (EAI, microservices, SOA, accident etc) must ensure the end solution is <strong>robust</strong> and <strong>reliable</strong>. These are two key attributes of any solution and rely on handling scenarios when things do not go exactly as planned when two systems talk to each other over a network</p> <p class="wp-block-paragraph">Planning…More

Software Monoliths

Companies need to modernize software and engineering to scale to reach new customers. Many find it increasingly hard to deliver outcomes safer and faster in a rapidly changing business ecosystem because of internal complexity from existing practices, systems and integrations. One cause is “shared” collaboration of resources between teams and in this post we explore these monoliths and monolithic practices More

Capturing the essence of your software with diagrams: Techniques for the engineer, designer and architect

<p class="wp-block-paragraph">Pictures<em> are “worth a a thousand words”</em> and in the software industry they can save time and help inspire the <strong>collective</strong> imagination</p> <p class="wp-block-paragraph">A good picture about a software system at right level can convey the right details. It is about what you <strong>leave out </strong>as much as what you put in and <strong>structure</strong>…More

Messaging, Events and Data-in-Motion: Asynchronous communication patterns

<p class="wp-block-paragraph">When integrating systems we often end-up writing <strong>asynchronous</strong> messaging interfaces for mostly system-to-system communications. This conversation technique is great because it does not require the sender and receiver to stay connected to each other in a session at the same instance in time, it is non-blocking and often brokered (like the post office which…More

Domain Service Design and Patterns

<p class="wp-block-paragraph">Domain services implement core logic for a business domain and are a relied upon by experience and consumer services. Domain services can be self contained and store the business logic and state or rely on an external provider system (translating from a “raw system format” to a “canonical” domain format)</p> <p class="wp-block-paragraph">In this post…More

Building strategic public and partner API experience: The power of experience adapter and an abstraction layer

<p class="wp-block-paragraph">As organisations look to take their offerings to the world outside for specific customers, partners or general public and grow their business, they must balance the risk of opening the door to internal mission-critical systems vs value provided. These offerings also must deliver the right experience, requiring an abstraction over the internal organisation services…More

Salesforce Integration: Context and Patterns

<p class="wp-block-paragraph">Integrating with Salesforce be in a Marketing or Customer management context is the norm these days. Salesforce offers a lot of flexibility for information exchange, storage and for capturing events on change</p> <p class="wp-block-paragraph">This post lists the interaction patterns we observe with Salesforce, the usage contexts, issues and best-practise</p> <h2 class="wp-block-heading">Salesforce Inbound Patterns</h2> <p…More

How to build APIs with the right abstraction: SOAP, REST, ODATA

<p class="wp-block-paragraph">Leaky abstractions can be bad, especially in the context of APIs we expose to the world. Here are some thoughts on how to be less leaky and achieve more self-service with the APIs you build</p> <p class="wp-block-paragraph">Modern software is built over the network with systems hooked-up either privately within the internal enterprise eco-system or…More

Common Service Caching Patterns

<p class="wp-block-paragraph">Caché implies to hide something. In a technology context this is “some service hides some data for a period of time (minutes to years)”</p> <p class="wp-block-paragraph">A cache is a bit of information we stash away to better serve the clients using our service. Some of the questions cache implementers face are: </p> <ul class="wp-block-list">…More

The difference between Open APIs and an Open API Specification

<p class="wp-block-paragraph">RESTful APIs can be internal (your company’s only) or public facing (Twitter). Thus internal APIs are called “Private APIs” and open to the public APIs are called “Open APIs”</p> <p class="wp-block-paragraph">Now, while building an API accelerator for our clients I was asked by a well meaning colleague if this was an Open API; the…More

Choosing the right tool for Stateful orchestration: Embedded Process Engines vs Serverless Step Functions

<p class="wp-block-paragraph">Just based on recent experience, I am going to put this out there – AWS Step Functions are great for technical state machines which move from one-activity to another but not really designed for stateful process orchestration and definitely not for implementing SAGA</p> <p class="wp-block-paragraph"><strong>Serverless Step Functions from AWS or BPMN Engines?</strong></p> <p class="wp-block-paragraph">When…More

Single Entity, Multiple Master: Manage Complexity with Domain Services Integration Pattern

<p class="wp-block-paragraph">We often think of enterprise systems as the master systems for one or more enterprise data entities. We believe the lifecycle of the entity is contained and managed by users in a system in an encapsulated and convenient manner. However, there are scenarios where multiple systems master an entity and this is often because…More

From Project to Product Teams: Implementing the Inverse Conway Move for better Software

<p>Modern software engineering techniques within organisations deliver “distributed features” using agile techniques. These features are distributed across different systems and integrated to provide an end-to-end experience. Traditional project delivery brings in  members from different <em>system</em> <em>oriented</em> <em>teams</em> to deliver these features in a loose and ad-hoc fashion and dis-bands the team after a project is…More

Domains, Sub-Domains and Bounded Contexts: Explained with example from industry

<p class="wp-block-paragraph">The Domain Driven Design (DDD) book and community use the language of Domains and Bounded Contexts. Often there is confusion around what is a Domain, Sub-Domain, Bounded Context and how do we tell the difference between one or other when we are in the trenches. </p> <p class="wp-block-paragraph">This confusion can lead to poor design…More

Observations in building Domain oriented services: How to think about building the right service for your enterprise

<p class="wp-block-paragraph"> <p>APIs are the abstractions over technical services. Good APIs mirror strategic thinking in an organisation and lead to better customer experience by enabling high-degree of connectivity via secure mechanisms</p> <p>Too much focus is on writing protocols & semantics with the desire to design good APIs and too little on business objectives. Not enough…More

A Pandemic, Open APIs and Citizen Science: Its 2020 baby!

<p class="wp-block-paragraph">Human societies have been hit by pandemics through the ages and relied on the central governing authorities to manage the crisis and disseminate information. I believe this time around with COVID-19, our societies have access to more information from our governments because we have the internet</p> <p class="wp-block-paragraph">If this pandemic is an evolutionary challenge,…More

Observability in distributed systems: Monitoring, Logging, Auditing and Historical analysis

“Knowing the quality of your services at any given moment in time before your customers do and using this information to continuously improve customer experience is part of modern software delivery and critical to the success of organisations” In this post, we present why it is important to observe and manage our systems and solutions proactively and…More

De-mystifying the Enterprise Application Integration (EAI) landscape: Actors, terminology, cadence and protocols

Any form of Enterprise Application Integration (EAI) [1] work for data synchronization,  digital transformation or customer self-service web implementation involves communication between the service providers and service consumers. A web of connections grows over time between systems, facilitated by tools specialising in “system-integration”; this article covers how the clients, services and integration tools communicate and…More

Tackling complexity: Using Process maps to improve visibility of integrated system features

<p style="font-size:12px;">“Entropy<em> always increases</em><span style="font-size:15px;"> “</span>– second law of thermodynamics</p> <p style="font-size:12px;">Enterprise systems are similar to isolated physical systems, where the entropy or hidden-information always increases. As the business grows, our technology footprint grows as new systems are implemented, new products and cross-functional features are imagined and an amazing network of integrations emerge</p> <p style="font-size:12px;">Knowing…More

Raspberry Pi Setup – Part II: IoT API Platform

Intro This is the second part in a series of posts on setting up a Raspberry Pi to fully utilize the Software & Hardware functionality of this platform to build interesting internet of things (IOT) applications. Part-I is here https://alok-mishra.com/2016/10/10/raspberry-pi-ssh-headless-access-from-mac-and-installing-node-processing/ … this covered the following: Enable SSH service on the Pi Connect to Pi without a display or router –…More

Raspberry Pi Setup – Part I : Boot, SSH and Headless access

<h1>Intro</h1> <p><strong>Part I :</strong> Documenting the workflow/steps to setup my Raspberry Pi (2 B) – from Installing Raspbian to installing Node, Processing etc</p> <p>Goals:</p> <ul> <li>Enable SSH service on the Pi</li> <li>Connect to Pi without a display or router – headless access via Mac</li> </ul> <h1>Steps</h1> <ol> <li>Install Raspbian</li> <li>Boot your Pi</li> <li>Setup SSH</li> <li>Connect to Mac</li> <li>Troubleshoot…More

Complex Form Evaluation with Drools

Introduction Complex business rules are best implemented using a ‘Rules Engine’. Drools is an open source Business Rules Management Product. See here   In this blog we will cover a few basics of using the Drools rule engine, specifically using a Domain Specific Language (DSL) which is a language that is more user focused. The…More

Design-first API Contracts: Key to accelerating Integration and Improving API Quality

<p class="wp-block-paragraph">Service specifications along with developer documentation are key to turning your APIs into products. A well written and standards based API contract can not only make it faster and easier to integrate but also to test and deliver a solution faster</p> <p class="wp-block-paragraph">Good API contracts help <em>improve</em> key software delivery metrics such as <strong>lead…More

Systems Integration Design: Picking the right patterns and building a robust solutions

<p>Systems Integration is key to building good distributed solutions as software modules are spread across network within and outside the organisation. Knowing where we are building a solution, the key requirements for interaction, data, consistency etc can help pick the right integration patterns</p> <p>Here is my list of what I look for when integrating systems</p>…More

Camunda BPM – Manual Retry

The Camunda BPM is a lightweight, opensource BPM platform (See here: https://camunda.com/bpm/features). The “Cockpit” application within Camunda is the admin dashboard where deployed processes can viewed at a glance and details of running processes are displayed by the process instance ids. Clicking on a process instance id reveals runtime details while the process is running – process variables,…More

Microservices with Docker and Spring Boot

This guide is for someone interesting in quickly building a micro-service using the Spring Boot framework. Works great if you have prior JAX-RS / Jersey experience Step-by-step guide Add the steps involved: Create a Maven Project Final Structure Pom ( Attached here ) Include Spring Boot Dependencies in your pom Parent Project <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId>…More

Java Application Memory Usage and Analysis

The Java Virtual Machine (JVM) runs standalone applications and many key enterprise applications like monolithic application servers, API Gateways and microservices. Understanding an tuning an application begins with understanding the technology running it. Here is a quick overview of the JVM Memory management JVM Memory: Stack and Heap form the memory used by a Java Application The…More

Dockerized Java Application Performance Analysis

<p>Using JMX to analyse a Java Virtual Machine (JVM) within a local or remote docker image. The example below explores how to analyse a Tomcat Server (version 7) running in a docker instance using Oracle JRockit Mission Control (JMC)</p> <p><img class="alignnone size-full wp-image-617" src="https://alok-mishra.com/wp-content/uploads/2016/02/screen-shot-2015-12-12-at-12-46-11-am.png&quot; alt="Screen Shot 2015-12-12 at 12.46.11 am" width="2852" height="1640" /></p> <p>Your JRockit…More