# Case Study: 3D Printing Farm
![print it for me logo](https://i.ibb.co/dtMdBcY/print-it-2-1.png)
## Background
You have been recruited by the innovative startup, _print-it-for.me_, aiming to revolutionize craftsmanship by offering regionally accessible, affordable 3D printing as a service. This service includes options for pick-up, same-day, and next-day delivery. The typical clientele of _print-it-for.me_ encompasses:
* Small businesses involved in small-to-medium-scale installations and repairs, such as plumbers, carpenters, electricians, etc.
* Research departments in need of rapid prototype development.
* Private makers and DIY enthusiasts.
Initially, _print-it-for.me_ will operate from a single location to validate the viability of the business model. This primary location will also house the Research & Development department, focusing on both software and hardware, where you will be stationed.
In the long term, _print-it-for.me_ envisions developing into a franchise business, with franchisees typically operating small-scale shops running between 5 and 15 3D printers. The company plans to open dozens, eventually hundreds, of print shops across Europe, offering franchisees:
1. A curated list of compatible printers and accessories, including tools, filament dryers, racks, robots, etc.
2. Exclusive purchasing conditions with selected hardware suppliers.
3. Contractual agreements with logistic partners for delivering prints to customers.
4. A centrally managed website for customer management, print ordering, payment, and tracking.
5. A specialized software for print shop operations.
Your primary responsibility is to design the architecture for the software that will be utilized by _print-it-for.me_ shops (point 5), codenamed SOS (Shop Operation System).
## Organization
_print-it-for.me_ is in the process of assembling a team of 20 professional software developers responsible for building all required software, with six dedicated to your project. The team size and allocation can be adjusted according to the workload and strategic priorities. SOS will be a focal project, especially during the initial three years.
## SOS Functional Requirements
1. SOS must be a locally installable desktop application, excluding central IT services from the SOS project’s scope.
2. SOS will receive orders via the internet from the _print-it-for-me_ central.
1. Users assign orders to certain printers in SOS.
2. Users must maintain the status of orders (e.g. in queue, printing, finished, ready for pickup, etc.) in SOS. Some status changes are done automatically (e.g. printing started). Status changes are reported back via internet to the central _print-it-for-me_ system.
4. SOS allows users to maintain and report their printer statuses (e.g. ready to print, maintenance, broken, etc.) to the central system for production and delivery estimation.
7. Checklists are an important aspect of SOS. For each order, the shop employee gets a customized checklist for preparing and executing the print (e.g. loading the correct filament, changing the nozzle, etc.). An order's checklist is customized based on the print's requirements and the printing hardware in the shop (e.g. printer model, availability of automated material systems, availability of robot-based automation).
8. The shop's employees will use 3rd party tools for checking models, slicing, etc. Such functions are _not_ in-scope for SOS. However, the necessary steps are included in the checklists.
9. SOS sends the _gcode_ files to the printer and uses the printer's API or third-party devices (e.g. cameras) to monitor the print (e.g. detect finish, detect printing problems).
10. SOS must include an accompanying smartphone app with which the shop employees can monitor the status of their shop (read-only) and through which they get important notifications (e.g. new order, print has finished, printing problems).
11. SOS must incorporate a simple inventory management feature for managing consumable materials, especially filament. Users are required to log material withdrawal in the system. Each material type will have a predefined minimum stock level, and the system will display an alert when this level is reached, indicating a need for reorder to prevent operational disruption.
## SOS Non-Functional Requirements
### Availability, Recoverability, and Continuity
_print-it-for-me_ shops use off-the-shelve desktop computers. They are not specifically built for high availability as printers will continue to print without them. Shop employees are no IT specialists who have in-depth knowledge about professional recovery systems and processes.
SOS must be quick to set up on a new workstation, with automatic data restoration and configuration retrieval.
### Scalability
Each shop has its own SOS workstation, with large shops divided into multiple independent operated sub-shops.
### Security
Data at rest is encrypted using BitLocker, and authentication is managed through Azure Active Directory (AAD).
The work in print shops is organized in shifts. A single SOS workstation is used by a single person who is currently on-duty. Therefore, the person working on a single workstation does not change very often.
Each _print-it-for-me_ shop has a firewall that blocks incoming traffic from the internet. Outgoing traffic is not limited.
SOS must support three user roles:
* Administrator - no limitations, can also assign role memberships
* Maintenance - can change configuration settings and perform maintenance tasks, cannot process orders
* Operator - can process orders and control prints
### Deployability
Installing SOS on a computer that fulfills its system requirements must be simple and fast. Installation can require a local system administrator account.
The number of SOS versions that must be downloaded and installed must be kept to a minimum. Ideally, SOS contains an automatic update mechanism where software updates are develivered automatically. Short downtimes (e.g. for restart) during SOS installations are acceptable.
### Configurability and Extensibility
SOS must be highly configurable and extensible. Supported printer models, checklists, available materials, supported accessories, etc. will change continuously. It _must not_ be necessary to install new SOS versions in such cases.
Checklists are not just sequences. They can contain e.g. conditions, loops, error handling, etc. Some checklist items need human assistance (e.g. put correct filament in printer), some can perform automated actions (e.g. send gcode file to printer and start printing process). In fact, they are small programs on their own.
The _print-it-for-me_ central will provide checklists for certain shop configurations. However, it must be possible to customize checklists for a specific shop.
### Localization and Internationalization
Franchisees of _print-it-for-me_ will be in many countries in Europe. Therefore, the user interface must support different languages.
The metric system will be used.
Date and time values must be display in the local timezone. Internally, date and time values must be stored in UTC.
### Portability
SOS desktop computers run on a supported version of Windows (currently Windows 11).
### Supportability
SOS must not contain specific support functions. _print-it-for-me_ uses a separate support tool that allows screen sharing with central support staff.
SOS must store comprehensive logs. These logs must be transferred to the central _print-it-for-me_ IT systems so that central analysis of logs is possible.
### Testability
SOS must include comprehensive automated tests for its core functionality.
SOS must also support automated and manual testing of different configuration and extensions (e.g. checklists, printer configurations, etc.).
## Tasks
### Core Tasks
1. Illustrate the overall architecture of SOS through a diagram.
2. Detail how you will address the configurability and extensibility requirements, focusing on whether you will implement a Microkernel architecture and how you will structure it if so.
3. Elaborate on how your architecture meets the testability requirements.
4. Provide a detailed overview of data handling mechanisms within your architecture.
### Optional Tasks - Organization
1. Outline your role in the project, including your involvement in coding and communication of architectural guidelines.
2. Define the measures you will implement to ensure adherence to your architectural guidelines by developers.
3. Describe your collaboration strategies with other architects responsible for central IT systems.
### Optional Tasks - Architectural Patterns for Communication
1. Explain the communication mechanisms between the SOS workstation and the SOS mobile app.
2. Illustrate how the SOS workstation will interface with central IT services.
# Diagram Created During Workshop
![Diagram](https://i.ibb.co/YR99Z5P/print-it-for-me-drawio.png)