# Case Study: 3D Printing Farm ![Hero](https://i.ibb.co/85H1nZX/Nexa-Craft.png) ## The Scenario ### Stepping Stones to Success Riding on the waves of your recent accomplishments at print-it-for.me—having successfully [developed their Shop Operation System (SOS)](https://hackmd.io/@rstropek/print-it-for-me) and [overhauled their Digital Shop Counter](https://hackmd.io/@rstropek/print-it-for-me-dsc)—a new challenge is awaiting you. print-it-for.me began its journey relying on commercial off-the-shelf 3D printers. But with an evolving vision and the drive for excellence, they transitioned, streamlining their operations to focus on a singular printer family. Pushing the envelope further, they embraced the open-source Voron printer platform. By sourcing components directly and immersing themselves in the nuances of the platform, the company mastered 3D printing with these devices. Their efforts bore fruit, achieving unparalleled print quality and extended printer lifespan, while also realizing cost savings through bulk purchasing. Their innovation and prowess didn't go unnoticed. Multiple features in top-tier tech publications and a swelling interest from the global maker community bolstered their reputation. Seizing this momentum, print-it-for.me aspired to diversify their portfolio, aiming to sell their tailor-made, high-caliber printers to 3D printing enthusiasts. Their envisioned sales model is twofold: 1. Personalized consultations and sales via their expert support team over phone calls 2. A user-friendly, self-service web store on their official site. ### Printer Configurator As the lead architect, you're now tasked with spearheading the design and development of the printer customization software, codenamed _NexaCraft_. print-it-for.me's printers aren't just devices; they're a testament to customization, offering a staggering 75 to 100 configuration options. These range from straightforward aesthetic choices, such as decorative element colors, to intricate technical decisions like choosing between standard cables and a Canbus-driven printer head control. While a vast majority of these configurations can be modified independently, it's crucial to note that several are interconnected, presenting dependencies. Some configurations might be mutually exclusive, while others may necessitate specific prior selections. The customization journey begins with a choice of one of three foundational printer models. From this starting point, customers can delve deep, tweaking and refining each element, ensuring the final product aligns perfectly with their desires and needs. To cater to diverse user scenarios, _NexaCraft_ will manifest in two distinct versions: 1. **Internal Support Version:** A robust version crafted to seamlessly integrate with the print-it-for.me's support application. This iteration will be built for the WPF desktop client, ensuring support staff have all the tools at their fingertips. 2. **Customer Web Version:** A sleek, user-friendly web application, allowing customers to effortlessly personalize their printers from the comfort of their web browsers. ### Team Structure and Responsibilities The NexaCraft project unfolds through the collaborative efforts of three distinct teams, each bringing its expertise to ensure the seamless implementation and success of the venture: 1. **Builder Team**: - **Members**: Comprising three printer specialists and four dedicated developers. - **Role**: The specialists are defining the base models, configuration options, and interdependent rules. In parallel, the developers are focused on creating a software platform to manage and maintain these base models and the associated configuration metadata. - **Timeline**: They're targeting a delivery date roughly four months from now for the finalized configuration metadata. - **Your Involvement**: You are not directly overseeing this development process. 2. **Sales Team**: - **Your Domain**: This is where you work. This team is at the forefront of developing the configurator tools both for the internal support team and for the end consumers via the website. 3. **Production Team**: - **Role**: Tasked with integrating NexaCraft's functionalities with print-it-for.me's existing ERP system, they handle everything from inventory and logistics to supply chain management and production planning. - **Timeline**: Once they have a clear and detailed list of requirements, they anticipate a swift turnaround, estimating software modifications to be complete in just one month. Given the tight schedules and the crucial role of the configurator in the overall project, it's imperative to commence its architectural design immediately. This proactive approach aims to ensure a reduced time-to-market. ## Functional Requirements ### Dynamic Base Models Printer specialists at print-it-for.me will determine the three core base models. These models are subject to evolution, ensuring they adapt to changing needs and advancements. ### Configuration Options The configurator will present the configuration options without simplifying them. Given the target audience comprises knowledgeable printer enthusiasts, there’s no necessity for beginner-friendly UI guidance. It is important to note that the configuration options and their available choices might undergo modifications in the future. ### Exploratory Configuration: Multi-Level Undo/Redo Research indicates users enjoy tweaking their choices. Hence, the configurator should incorporate multi-tier undo and redo capabilities. Every configuration alteration, ranging from component modifications (like the addition/removal of a fire suppression system) to simple value tweaks (such as adjusting the printing nozzle), should be reversible. ### Save Configurations Users should have the liberty to save their unique printer configuration for future reference or modifications. In scenarios where a saved configuration includes obsolete options, users should be prompted to adjust the necessary settings to obtain a valid configuration, without entirely discarding the initial setup. ### Intelligent Option Constraints Given the intricate web of dependencies and mutual exclusivities among options, a robust logic system is imperative. Though the _Builder_ team will orchestrate this, your input as a stakeholder can shape technical implementations, like the choice of a programming platform or nuances of the API design. ### Bill of Materials (BOM) At any given moment, users should have access to a comprehensive BOM corresponding to their ongoing configuration. The BOM contains everything, from large extrusions for the printer frame to the smallest screw. The generation of the BOM based on configurations falls under the purview of the _Builder_ team's software. Your task is to fetch this BOM via their API and relay it to the user in real-time. The estimated BOM generation time is between five to ten seconds. ### Pricing, Availability, Ordering The configurator will interact with the _Production_ team's API within the ERP system to procure real-time pricing, availability, and even facilitate order placements. The API is designed to compute pricing and delivery timelines for a specific printer configuration (inclusive of the BOM) in approximately 20 to 30 seconds. While the ERP modifications aren’t your responsibility, drafting the technical requirements for the _Production_ team to realize the APIs is essential. This is part of your responsibilities. ## Your Tasks ### Basic Tasks You have a reputation for building great software architectures. Therefore, you got the job to come up with the overall architecture for NexaCraft. You got assigned two newly hired assistants who can help with operational and organizational issues (e.g. research, documentation, technical writing, building prototypes, doing feasibility studies, etc.). You need to prepare a presentation in which you outline the general architecture for NexaCraft. It should contain the following aspects: * Description of the general architectural style that you are going to use * High-level architecture diagram * Overview of communication patterns * Work distribution between server- and client-side software ### Additional Tasks * Elaborate which standard/protocols your architecture is going to be based on * Make suggestions for technical implementation platforms (e.g. programming languages, frameworks, libraries)