Blog Infos

Photo by Joshua Rawson-Harris on Unsplash


In the first two articles, we explored the challenges of implementing traditional Clean Architecture in Android and how we discovered the power of Functional programming concepts as a solution.

Fluent and Fun Clean Architecture using Kotlin — Part 2(2023)

Now, we are diving deep into the essence of Fluent and Fun Clean Architecture. We’ll decode the reasons behind their design and uncover how they bring expressive code, allowing us to reap the best of benefits in our Android projects.

Throughout this article, we’ll explore the core principles of Fluent and Fun Clean Architecture and understand how they benefit our development process. By the end, you’ll have the knowledge to craft more elegant, flexible, and enjoyable Android applications.

Spoiler: There is no code samples. In this article, we’ll dive into the fascinating principles of Fluent and Fun Clean Architecture, offering an in-depth understanding of these architectural concepts. Get ready to unlock a new world of Android development! Be sure to follow or subscribe to my Medium account for the detailed guide, coming soon. Let’s embark on this journey of architectural enlightenment together!

Fluent and Fun Clean Architecture: The Solution to Our Team’s Ambiguity?

I created Fluent and Fun Clean Architecture to avoid ambiguity and unnecessary discussions within the team. With various interpretations and opinions on Clean Architecture, having a specific, agreed-upon approach can streamlines our project’s structure.

Moreover, I believe in encouraging a shift in mindset towards functional programming. By adopting Fluent and Fun Clean Architecture, developers automatically embrace functional programming concepts. This shift helps them think in terms of functions and solve problems differently from traditional OOP approaches.

Beyond eliminating ambiguity, Fluent and Fun Clean Architecture brings numerous advantages to our development process. By adhering to a consistent architectural paradigm, we enhance code maintainability and improve collaboration among team members.

It fosters a shared understanding of the project’s structure, making it easier to onboard new developers and scale our applications efficiently.

The shift towards functional programming encourages us to write more modular and testable code, leading to robust and reliable solutions. With Fluent and Fun Clean Architecture as our guiding principles, we embark on a journey of code elegance and development joy, ultimately delivering high-quality Android applications.

What is Fluent and Fun Clean Architecure?

Fluent and Fun Clean Architecture follows the same goal of clean architecture which is to create a software design that emphasizes separation of concerns and maintainability. It aims to produce a well-structuredflexible, and testable codebase by organizing the application into distinct layers, each with its own responsibilities and dependencies.

The Objectives of Fluent and Fun Clean Architecture:

Modularity: It aims to create a modular design where each component has a specific responsibility, making the code easier to manage and modify.

Testability: The architecture prioritizes testability by isolating the core business logic from external dependencies, allowing for more effective and reliable testing.

Flexibility: By decoupling components, It enables developers to make changes or add new features without impacting the entire system.

Maintainability: The focus on separation of concerns and clear boundaries enhances the codebase’s maintainability, reducing complexity and making it easier to troubleshoot and update.

Independence of Frameworks: The architecture remains independent of external tools, frameworks, or libraries, providing flexibility to use different technologies as needed.

Simplicity: Clean Architecture promotes simplicity through its clear organization and emphasis on straightforward, understandable code.

Business-Centric: The architecture keeps the core business logic at the center, ensuring the application’s behavior aligns with domain requirements.

Overall, It aims to deliver a well-structuredadaptable, and maintainable codebase that focuses on business needs while being straightforward to understand and test.

So what is the difference between Fluent and Fun Clean Architecture vs Traditional Android Clean Architecture?

The key distinction lies in the focus and implementation of Fluent and Fun Clean Architecture, which center around enhancing the domain layer and incorporating functional programming concepts, as hinted in the title.

To provide a clearer description, let’s break down the concepts and explore their core attributes:

Fluent — The term “fluent” denotes the ability to express oneself easily and articulately. Although it may be mistaken for the fluent interface pattern, it differs in essence. Nevertheless, the objective of both Fluent in our architecture and the Fluent Interface Pattern aligns: creating code that prioritizes readability and expressiveness, enabling code that reads like natural language for enhanced understanding.

Fun — The term “fun” signifies providing amusement or enjoyment. In the context of Fluent and Fun Clean Architecture, it bears a dual meaning: representing our desire for code to be enjoyable and also serving as a keyword when creating functions in Kotlin.

“Fun” acts as our identifier for functional programming, encouraging the utilization of functional programming concepts such as function composition and declarative style, and treating functions as first-class citizens. Adopting this approach underscores the idea that “fun” takes precedence before “class”, emphasizing the importance of functions in shaping the architecture.

“Fun first before class. It is not class before fun.”

Clean — pure and innocent. When we relate “clean code” to the attributes of “pure” and “innocent,” we are emphasizing its simplicity, clarity, and lack of negative consequences. Clean code can be seen as code that is free from unnecessary complexity, follows best practices, and has no hidden or harmful side effects.

Clean code is characterized by simplicity and consistency, it values straightforward implementation, avoiding unnecessary abstractions and complex logic. Uniformity in namingformatting, and structure throughout the codebase nurtures an intuitive experience, facilitating easy navigation and eliminating code duplication. Moreover, clean code embraces modularityorganizing it into smallerfocused modules, each dedicated to distinct tasks, enhancing maintainability and scalability.

Inspiration for Fluent and Fun Clean Architecture

In the quest to create a powerful and expressive architecture for Android development, I found inspiration from various sources that led me to formulate the concept of Fluent and Fun Clean Architecture. Combining the principles of functional programming and the readability of the Fluent interface pattern, I aimed to design an architecture that not only encourages functional programming but also makes code elegant and easy to comprehend.

  1. Discovering Functional Programming Concepts: My journey began with the revelation of functional programming concepts. Learning about the power of function compositiondeclarative style, and treating functions as first-class citizens ignited my passion for exploring this paradigm further. I realized that functional programming could greatly simplify complex tasks and improve code quality.
  2. Unveiling the Magic of Fluent Interface Pattern: Inspired by the Fluent interface pattern, which strives to enhance code readability through function chaining, I saw the potential to apply this approach to the use case layer in Clean Architecture. By utilizing function composition and nested functions from functional programming and integrating function chaining from Fluent interface pattern, I aimed to create a compelling architecture that prioritizes expressive and readable code.
  3. Seeking the Perfect Blend: In my search for an architecture that fosters both functional and fluent principles, I explored existing Android Clean Architecture implementations. While I found some using functional approaches with built-in functions, they still didn’t fully align with my vision. To refine my understanding, I extended my research beyond Android to web and server development, where I stumbled upon Function as a Service (FaaS). Though FaaS was different in nature, it inspired me to grasp the full potential of functions in kotlin and broaden my architectural horizons.

Job Offers

Job Offers

    Senior Android Engineer

    Carly Solutions GmbH
    • Full Time
    apply now

    Senior Android Developer

    • Full Time
    apply now



  1. The Birth of Fluent and Fun Clean Architecture: Armed with a wealth of insights and motivated by the vision of a cleanexpressive, and flexible architecture, I embarked on creating Fluent and Fun Clean Architecture. While some of the underlying concepts were not entirely novel, this architectural approach provided a new and comprehensive framework for organizing thoughts and diving into functional programming, even for those unfamiliar with it.

The inspiration behind Fluent and Fun Clean Architecture emerged from a blend of functional programming concepts, the elegance of Fluent interface pattern, and the realization of what functions can truly accomplish. This architecture encourages developers to embrace functional programming principles while emphasizing code readability and expressiveness. By adopting this approach, developers can embark on a journey of organized and enjoyable Android development, taking full advantage of functional programming’s potential.

Ending with why did we focus on the domain layer for Fluent and Fun Clean Architecture?

It is because the domain layer represents the heart and soul of the application. The use cases within this layer serve as concise explanations of the application’s functionalities, providing a clear summary of the actions required to achieve specific outcomes. By emphasizing the domain layer, we avoid unnecessary back-and-forth between the presentation and data layers, simplifying our understanding of the application’s purpose.

Our primary focus is building a robust domain layer, including the use case and repository interface. Therefore, by investing effort in developing a strong domain layer, our goal is to create code that is not only readable and expressive but also less impacted by changes in other parts of the application.

By investing in our domain layer and utilizing Fluent and Functional use cases, we can elevate our development experience, creating clean, maintainable, and expressive code that withstands changes and promotes continuous improvement in our Android projects.

Photo by Harrison Broadbent on Unsplash

This article was previously published on



It’s one of the common UX across apps to provide swipe to dismiss so…
Hi, today I come to you with a quick tip on how to update…
Automation is a key point of Software Testing once it make possible to reproduce…
Drag and Drop reordering in Recyclerview can be achieved with ItemTouchHelper (checkout implementation reference).…

Leave a Reply

Your email address will not be published. Required fields are marked *

Fill out this field
Fill out this field
Please enter a valid email address.