A Cell
-
Is a module that aggregates business capabilities and manages their internal intricacies.
-
Is a self-contained unit that groups functionalities together based on business capabilities into a single cohesive unit.
-
Might internally use sub-components to achieve the complex business tasks but these components wouldn’t be separately deployable.
-
Has clear and well-established boundaries that define its area of responsibility, data ownership and exposes explicit interfaces. Can leverage various communication mechanisms such as APIs, events and messages.
-
Implements necessary mechanisms for monitoring their health, performance and logging activity.
-
From the complexity perspective, a couple of pointers to consider
-
Expertise: cells that combine functionalities requiring vastly different skill sets (e.g. data management and front-end development. clinical terminology and API development) can become counter-productive, complex to build and maintain.
-
Processes and practices: different areas often follow different practices. Merging these within a single cell can lead to inefficiency.
-
Lets assume that we want to provide a comprehensive solution for managing drug information, enabling analytics, and delivering insights for the medication cabinet inventory management system. How would it look like in the cell-based architecture paradigm?
Responsible for fetching and maintaining the drug information
-
By Importing the external drug library APIs or datasets.
-
Apply global transformations, enrich and standardize to industry standards.
-
Translate and normalize external data library data to a format compatible with organization-specific concepts used within the platform to minimize impacts of the external changes to the downstream modules. A.k.a domain-agnostic, global transformation and normalization.
-
Provide APIs for other cells to access the drug information.
Responsible for
-
Storing tenant-specific settings like preferred drug nomenclatures or additional attributes.
-
Mapping external drug library data to the tenant-specific terminology codesets.
Responsible for
- Secure and expose APIs for the external user interface application to interact with the cell for configuration and data access.
Responsible for providing a user interface for the tenant personnel to configure settings, map drug data and potentially view drug information retrieved by the cell.
Note:
- Typically external applications aren’t considered as a cell or part of the cell because typically they aren’t
-
Not self-contained: UI rely on one or more APIs to function.
-
Not independently deployable: Although it's technically possible to deploy the standalone GUI application, its functionality is tied to one or more API to be useful for the users.
-
Responsible for
-
Receiving raw data from the Drug Library Cell.
-
Implementing data processing pipelines to clean, transform, prepare the data for analysis.
-
Catalog data products, data quality information and associated metadata.
Responsible for creating and maintaining the user interface for visualizing and interacting with the processed data.
- Responsible for connecting to one or more data sources where the processed data from the Analytical Data Processing Cell resides.
Responsible for
-
Implementing charts and other necessary visual representations.
-
Allowing users to interact with the visualization to explore the data further such as filtering and drill down.
graph TB
subgraph GUI
GUI-Application
end
subgraph External-Libs
NDC[NDC]
RxNorm[RxNorm]
Tenant-Library[Tenant-Library]
end
subgraph Drug-Library-Cell
subgraph Core
Import[Import]
Standardize[Standardize]
RESTfulAPI[API-Handlers]
RESTfulAPI --impl--> Import
RESTfulAPI --impl--> Standardize
end
subgraph Configuration management
Tenant-Preferences
Mappings
RESTfulAPI --impl--> Tenant-Preferences
RESTfulAPI --impl--> Mappings
end
subgraph API-GW
APIs
Authorizer-Integration
end
end
subgraph Data-Platform-Cell
Data-LakeHouse
Data-Product-Catalog
subgraph Analytical-Data-Processing-Cell
Data-Ingestion
Data-Pipelines
end
Data-Pipelines <--> Data-LakeHouse
Data-Pipelines --> Data-Product-Catalog
Data-Ingestion --> Data-Pipelines
end
subgraph Data-Visualization-Cell
Data-Retrieval
Dashboards
end
GUI-Application <--use--> APIs
APIs <--authx--> Authorizer-Integration
APIs <--fwd--> RESTfulAPI
External-Libs --import--> APIs
APIs --send analytical data-->Data-Ingestion
Data-Retrieval <--> Data-Product-Catalog
Data-LakeHouse --> Data-Retrieval
Data-Retrieval --> Dashboards
User --use--> GUI-Application
User --use-->Dashboards