In the previous article ( we saw how to deploy a Kotlin Spring Boot Reactive App on Elastic Beanstalk manually. In this article we will look at how the deployment can be automated.

Create a CodeCommit Repository

We will be using CodeCommit git repository as an SCM for our service. Let’s create a CodeCommit Repository

Generate git credentials for accessing the CodeCommit repository

The full documentation for working with CodeCommit repositories using IAM users is available on aws site:

To be able to push and pull code from the CodeCommit repository we would need an IAM user.

Let’s create an IAM user. …

Let’s build a sample application to learn about different AWS services.

The Practice Problem

For this, we will build a quiz application which will show list of quizzes on home page and on selection of a quiz will present the quiz questions with options to the user where they would be able to select an answer which will be validated on click of a submit button.

In the end we will show all the questions with their right answers and whether user did answer them correctly or not.

The tech stack

  • Backend — Kotlin, Spring Boot Reactive
  • Frontend — VueJS
  • Database — AWS RDS

The beginning

To begin…

What are feature toggles?

Feature Toggles (often also referred to as Feature Flags) are a powerful technique, allowing teams to modify system behavior without changing code.

- Martin Fowler

Feature toggles is a mechanism by which one can modify the system behavior by enabling or disabling the feature toggles as required. It’s also a great way to keep certain features enabled in certain environment and keep them disabled in other environments to minimize any impact on the system failures.

It helps release half baked functionality in to the production without worrying about it’s impact on the system, it also helps hide functionality until it’s…

Using different entities for different layers like repository, service and view is a common (anti)pattern followed while developing web applications.

Separate entity per layer pattern

Using different model at each layer allows us to represent entities differently at each layer in a way such that the structure of the model makes sense at that layer. This is a good way of achieving separation of concern and lose coupling.

On the contrary use of single domain model across all layers simplifies writing the code in many cases but many times we end up polluting domain with view or repository layer related logic. …

When I started coded in Scala I heard someone saying List, Option, Future etc. are all monads and functors. I wanted to understand what exactly is a monad or a functor.

A quick google search and I got articles explaining like this


With Java 8 we need to rethink the implementations of most of the design patterns. Lambda expressions prove to be useful in simplifying few design patterns by reducing the boilerplate code required to implement the design pattern. In this post we are going to rethink the criteria design pattern.

Criteria design pattern: classic way

Criteria / Filter / Specification design pattern is widely used to filter out a set of objects based on dynamic filter criteria or business rules which can be chained together using logical operators. It can also be used to determine if the given object satisfies some criteria or business rules.


Cons List representation

The fundamental data structure in many functional languages is the immutable linked list.

It is constructed from two building blocks:

Nil: The empty list

Cons: A cell containing an element also known as head; and a pointer to the rest of the list also known as tail.

The term cons comes form functional programming language ‘lisp’. In Scala, there is a double colon operator :: called cons operator.

Let’s take an example in Scala. Consider following list.

List(1, 2, 3) or 1 :: 2 :: 3 :: Nil

In memory, the list is represented as follow:

| |…

<a href=”">Designed by Freepik</a>

Builder pattern comes handy when a large complex object is to be built. Specially when it can be built in multiple combinations. There is one reason for which I have always hated builder pattern is that you need to add a new method to set a value for every member variable in the class. Whenever a new variable gets added, a new method need to be introduced in builder. Many times developers would just copy an existing assignment method and would just rename it without modifying the assignment expression inside it. For very long number of member variables, builders become…

How does the Java streams API compare with Scala and Groovy.

Source: Toptal

Let’s get started.

Assume a simple Book class.

public class Book {

private String name;
private String author;
private int numberOfPages;

public Book(String name, String author, int numberOfPages) { = name; = author;
this.numberOfPages = numberOfPages;

public String getName() {…

Sujit Kamthe

Software Craftsman | Lead Consultant @ Thoughtworks

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