Introduction & Problem space
Architectural Katas
Architectural Katas are collaborative exercises where software architects and developers work together to design solutions for hypothetical scenarios. The term "kata" is borrowed from martial arts, where it refers to a practice routine for improving skills. In the context of architecture, it emphasizes honing design skills, teamwork, and creative problem-solving in a structured environment.
Goals
There aren't many opportunities in a software engineer's career to design a system from scratch. Therefore, it makes sense to practice this activity and be ready when the opportunity arises.
The goal in this series is to solve the Gird the Grid kata from Neal Ford. During this process, I plan to document the key steps and provide some details for implementing my solution.
Problem statement
A company who builds management software for electrical grids needs to update their outdated software solution, and plan to sell their offering as a platform.
Users
Small to medium-size electic market companies, able to accommodate electrical grids from 100,000 to 1,900,000 electrical customers.
Requirements
Configurable for specific grid company characteristics (state, tax rates, etc.)
State-of-the-art user experience
Dashboards with analytics reports with near-real time data from the grid
Excellent reporting capabilities
Sophisticated analytics-based engine to determine best throughput/money
Administer through either desktop or mobile devices
Security penetration attempt reporting
Additional Context
Four nines (99.99%) reliability
Turn-key deployment on remote sites
Security is a first-class concern
Company wants to shift from managing electrical grids to becoming a software reseller
Problem analysis
Users
Our users will be employees of electric market companies, likely including grid operators, system administrators, and business professionals. Let's estimate the number of these users to be around 100. The requirements don't mention anything about the utility company's customers. So, let's assume that their customers won't have access to this system.
Requirements
The system needs to be flexible to meet the needs of different companies. We might consider having a core package with the main functionalities and some add-ons to extend or customize each installation.
We need to collect near-real-time data from the grid and display it on dashboards or in reports. This means handling a large amount of incoming data.
There should be an engine that recommends different grid optimizations based on analytics. We need to send command data to the grid components.
Security-related logs should be sent to a SIEM (Security Information and Event Management) tool for analyzing penetration attempts or anomalies.
Quality goals
Additional context gives us clues about the most important non-functional requirements: reliability, security and maintainability.
Context
Keeping all of this in mind, let's outline the system context to better understand what we need to address.
Users
Grid operator: Monitor and control the grid's real-time operations, optimize throughput, and respond to alerts and anomalies.
System administrator: Configure the system to align with the grid company’s specific requirements and maintain operational integrity.
Business user: Oversee operational efficiency, cost management, and strategic alignment of the grid system with business goals.
External systems
Supervisory Control & Data Acquisition: Monitor and control grid equipment like transformers, circuit breakers, and substations in real-time.
Advanced Metering Infrastructure: Provide data from smart meters about energy usage, power quality, and outages at the customer level.
Identity & Access Management: Integrate with corporate authentication systems.
Intrusion Detection and Prevention Systems: Share and analyze logs for penetration attempts or anomalies.
Alert & Monitoring: Collect application logs and metrics from the system for operation and support purposes.
Now that we have a clear understanding of what we need to solve, let's explore the solution space in the next article.