├── README.md
├── adrs
├── ADR-10: Cloud provider.md
├── ADR-11: Data analysis capability.md
├── ADR-1: Architecture design record style.md
├── ADR-2: Service-based architecture style approach.md
├── ADR-3: Social network capabilities.md
├── ADR-4: Webinars capability.md
├── ADR-5: Incorporate new functionality into Farmacy Food Mobile and Web Apps.md
├── ADR-6: Sensitive data access.md
├── ADR-7: Observability.md
├── ADR-8: Notifications.md
└── ADR-9: Inventory Replenishment Module.md
├── docs
└── farmacy_family_arch_kata.pdf
├── images
├── Silver-medal.png
├── architecture_style.jpg
├── aws-auto-scaling.png
├── baseline_architecture_container.jpg
├── baseline_architecture_context.jpg
├── data.png
├── data_ext.png
├── deployment.png
├── desktop_1.png
├── desktop_2.png
├── desktop_3.png
├── desktop_4.png
├── edietician.jpg
├── inventory_replenishment_module.jpg
├── marketing_view.jpg
├── medal.png
├── mobile_1.png
├── mobile_2.png
├── mobile_3.png
├── mobile_4.png
├── mobile_6.png
├── mobile_7.png
├── mobile_8.png
├── mobile_9.png
├── quality_attributes.jpg
├── target_architecture_containers.jpg
└── target_architecture_context.jpg
└── pages
├── Infrastructure_register.md
├── data.md
├── edietician.md
├── multizone_approach.md
├── question_and_answers.md
├── subdomains.md
└── ui.md
/README.md:
--------------------------------------------------------------------------------
1 | # The Farmacy Family Architectural Kata by O'Reilly
2 |
3 | Welcome to the Farmacy Family Architectural Kata run by [O'Reilly](https://www.oreilly.com/) in October - November 2021. This is an architectural documentation for the solution proposal from Sever Crew team.
4 |
5 | ## Results
6 |
7 | We became the 2nd place Winners in this competition.
8 |
9 | ## Contents
10 | - [About the team](#about_the_team)
11 | - [Overview](#overview)
12 | - [Baseline Architecture](#baseline_architecture)
13 | - [Context](#baseline_context)
14 | - [Containers](#baseline_containers)
15 | - [Initial requirements](#initial_requirements)
16 | - [Primary goals](#primary_goals)
17 | - [User requirements](#user_requirements)
18 | - [Stakeholders](#stakeholders)
19 | - [Constraints](#constraints)
20 | - [User stories](#user_stories)
21 | - [Target Architecture](#target_architecture)
22 | - [Context](#target_context)
23 | - [Containers](#target_containers)
24 | - [Assumptions](#assumptions)
25 | - [Significant Quality Attributes](#quality_attributes)
26 | - [Deployment](#deployment)
27 | - [Supporting constant change](#evolutionary)
28 | - [Risks](#risks)
29 | - [Security](#security)
30 | - [Architecture design records](#adrs)
31 | - [Additional resources](#additional_resources)
32 |
33 | ## About the team
34 | Our team is a group of friends from the IT department of a vertically integrated steel and steel-related mining company [Severstal](https://www.severstal.com/eng/). We are all passionate about software design and development.
35 |
36 | * [Oleg Krasnov](https://www.linkedin.com/in/oleg-krasnov/)
37 | * [Evgeny Sakirkin](https://www.linkedin.com/in/esakirkin/)
38 | * [Nastya Semchukova](https://www.linkedin.com/in/anastasia7chukova)
39 | * [Leonid Mironov](https://www.linkedin.com/in/leonid-mironov-88696690/)
40 | * [Petr Mironov](https://www.linkedin.com/in/%D0%BF%D0%B5%D1%82%D1%80-%D0%BC%D0%B8%D1%80%D0%BE%D0%BD%D0%BE%D0%B2-93ba92209/)
41 |
42 |
43 | ## Overview
44 | Farmacy Food is a tech-enabled healthy food startup that takes the “Let food be thy medicine” quote literally and creates tasty meals around peoples’ dietary needs and active lifestyles to support their overall well-being. Our mission is to make health and wellness radically affordable and accessible.
45 |
46 | Founder: Kwaku Ose
47 |
48 | ## Baseline architecture
49 | This is an actual Farmacy Food (designed by Arch Collider from the first Kata exercise - [ldynia/archcolider: O'Reilly's first Software Architectural Katas (github.com)](https://github.com/ldynia/archcolider) system architecture. The customer interacts with Farmacy Food through well designed touch-points.
50 |
51 | Those are the:
52 | * Cross-platform web and mobile apps
53 | * Smart Fridges - food/drink kiosks that are situated in different locations and connected to the system using API.
54 | * Point of Sales - sell our product but have an employee handle the transactions through a point of sale.
55 |
56 |
57 | ### Context
58 | The system context diagram below depicted key users of the system and its external dependencies:
59 |
60 | 
61 |
62 | ### Containers
63 | The containers diagram shows the mid-level view of software design and how the containers communicate with one another in baseline architecture.
64 | 
65 |
66 | ## Initial requirements
67 | Farmacy Family will be an enhancement of the existing Farmacy Foods system that adds tighter engagement with their customers.
68 |
69 | When a customer of Farmacy Food purchases a meal, the Farmacy Family will involve him into a community of people with the same perception of healthy eating and offer additional benefits for becoming an engaged customer.
70 |
71 | ### Primary goals
72 | The Product Owner establishes the following business goals:
73 | * **GL-1:** Develop relationships between engaged customers and nurture those relationships
74 | * **GL-2:** Convert transactional customers to engaged customers
75 | * **GL-3:** Generate analytical data from medical information to demonstrate the benefits of Farmacy Foods
76 | * **GL-4:** Engage customers with health education and marketing
77 | * **GL-5:** Develop new features and loyalty programs based on community data insights
78 | * **GL-6:** Increase partnership programs with clinics and dieticians
79 |
80 |
81 | ### User requirements
82 | There are some key requirements described by Product Owner:
83 | * Hundreds of transactional customers, separated by distinct geographic zones.
84 | * Additionally, different clusters of customers frequently consolidate around similar dietary requirements.
85 | * A focus on ensuring that the entire offering is accommodating to low income, poverty, homeless, college students, educators, but also anyone who needs high quality, well sourced food in the neighborhood area.
86 | * Add a new system to manage customer profiles, allowing community engagement, personalization around preferences and dietary needs.
87 | * Support geographical trend analysis to Farmacy Family’s ability to optimize the foods delivered to fridges (an additional integration point TO Farmacy Foods).
88 | * Support both push and pull models for community engagement. In other words, the Farmacy Family will manage forums,emails, and create connections between similar demographics. The Farmacy Family needs transactional member information for outreach purposes. The engagement model includes subscriptions, forums, reference material, class information, and other media that supports Food-as-medicine.
89 | * eDietian has access to customer profiles to improve advice and monitoring of customers. Additionally, the customer and dietitian can interact via messages.
90 | * Farmacy Family wants to improve the distribution and potential food waste from having the wrong mix of foods in a particular fridge.
91 | * Farmacy Family will include medical profile information and the ability to share information with medical service providers.
92 | * Farmacy Family customers can customize how much profile information they want to allow the community to see, at a fine-grained level.
93 | * Farmacy Family has relationships with third party providers (clinics, doctors, etc) that have access to more analytical data to improve engagement (for example, regional dietary observations).
94 | * Add Farmacy Family user interface to existing Foods interface, which is currently a Reactive monolith. Create a holistic UX for both food and Farmacy Family to support engagement models.
95 |
96 | There are several engagement models:
97 | * **Clients** - building a community, education process, increased awareness about healthy food and lifestyle
98 | * **Clinics** - work with clinics to establish baseline regular tests for clients, analysing results and demonstrate any changes in customers overall health. This info could gain investors and additional support and help.
99 | * **Dieticians** - Farmacy Foods supported generic advice from dieticians. Farmacy Family will support one-on-one advice for engaged customers based on regular contact via messages.
100 | * **Family Foods** - watching which Transactional Customers (and their information) are not part of Farmacy Family to start the onboarding process for those customers.
101 |
102 | Also, there are some additional information received during the [question and answer](pages/question_and_answers.md) session.
103 |
104 | ### Stakeholders
105 |
106 | This section describes key stakeholders and their concerns:
107 | * **SH-1:** Farmacy Family users (engaged customers)
108 | * Clear and simple user interface
109 | * Useful services for healthier and happier life
110 | * **SH-2:** Farmacy Food users (transactional customers)
111 | * Easy onboarding process to be part of Farmacy Family
112 | * No additional authentication account for login into Farmacy Family services
113 | * **SH-3:** Helpdesk
114 | * Easy access to information about services falls, errors and exceptional situations
115 | * **SH-4:** Product owner
116 | * Attract different types of clients to be
117 | * Improve quality of provided food and services
118 | * Open new niches for business development
119 | * **SH-5:** Ghost Kitchen and third party kitchens
120 | * Get information about prepared and delivered meals consuming to predict supply refilment
121 | * Get information about tastes of different communities for better menu and superior logistic
122 | * **SH-6:** Dieticians
123 | * Suggest one-to-one consultations for Farmacy Family users
124 | * Publish articles about new effective diets, natural and healthy food, etc
125 | * Search in catalog by specific components
126 | * **SH-7:** Clinics (Doctors)
127 | * Propose regular test and help for Farmacy Family clients
128 | * Get information about health changes after tests
129 | * Support Farmacy Family client with several communication instruments
130 | * **SH-8:** Food suppliers
131 | * Predict plan of purchases and delivery
132 | * **SH-9:** Developers
133 | * Simplify of developing and maintaining the system
134 | * **SH-10:** DevOPS
135 | * Simplify of monitoring
136 | * Simplify of configuration and scaling
137 | * **SH-11:** Community admin
138 | * Simplify of managing blogs, forums, group chats, etc
139 | * **SH-12:** Food Supplier
140 |
141 | ### Constraints
142 | Below listed global constraints for the solution that drives all trade-off decisions:
143 | * **CON-1:** The new system must seamlessly incorporate into Farmacy Foods
144 | * **CON-2:** Add Farmacy Family user interface to existing Foods interface, which is currently a Reactive monolith. Create a holistic UX for both food and Farmacy Family to support engagement model
145 | * **CON-3:** The budget for development new system isn’t unlimited
146 | * **CON-4:** Time-to-market is critical for most of startups so it should be quite straightforward CI/CD process
147 | * **CON-5:** USA is the target geographic area
148 | * **CON-6:** About medical profiles laws
149 |
150 | ### User stories
151 | **Profile**
152 | * **US-1.1:** As a User I want to manage and restrict profile data and community should see only allowed by me information
153 | * **US-1.2:** As a Client I want to be sure that doctors profile has been confirmed with necessary official documents and I should be informed that I will get a quality consultation
154 | * **US-1.3:** As a Client I need that Farmacy Family mobile application will receive data from Apple Health or Google Fit without any manual operations
155 | * **US-1.4:** As a Doctor I want clients will fill forms about their health to get primary information
156 | * **US-1.5:** As a Client I need an opportunity to upload medical profiles and information to share with other medical specialists
157 | * **US-1.6:** As a User I want an additional agreement about sharing my personal data to protect this information from third parties
158 | * **US-1.7:** As a Dietician I want an opportunity to review data about health status of users to make recommendations on their diets
159 | * **US-1.8:** As a User I need to get my medical profile from clinics without any manual operations or efforts
160 | * **US-1.9:** As a Doctor I want to establish wellness goals for patients to improve their level of health and wellbeing
161 | * **US-1.10:** As a Doctor I need full statistic about patients compliance with the goals to evaluate their progress
162 | * **US-1.11:** As a Low-income I want that medical profile should be as usable as possible for the client to answer the questions quickly and correctly
163 | * **US-1.12:** As a Doctor I want to manage clients goals to quickly assign goals to a patient based on a template
164 | * **US-1.13:** As a Clinic I want to get feedback about regular tests results and overall clients health
165 |
166 | **Social Network**
167 | * **US-2.1:** As a User I want to have an opportunity to join a community of like-minded people to share interesting and useful information
168 | * **US-2.2:** As a User I need to participate in online and offline meetings to collaborate with community
169 | * **US-2.3:** As a User I need an opportunity to post thoughts, photos, video to share my progress and knowledge with people
170 | * **US-2.4:** As a User I want an opportunity for everyone in community to post some comments in my articles to to receive feedback
171 | * **US-2.5:** As a User I want to join communities and group chats to find out the information I'm interested in
172 | * **US-2.6:** As a User I want to communicate with other users with messages so that I can promptly receive information
173 | * **US-2.7:** As a Doctor (and Dietician) I need blog functionality with some recommendations so that people could get received primary information without personal (face-to-face) consultations
174 | * **US-2.8:** As a Doctor (and Dietician) I need opportunity to moderate group chats so that we could discuss common themes together
175 | * **US-2.9:** As a User I want create and manage groups and group chats to publish content for a certain circle of people
176 | * **US-2.10:** As a Low-income I want to get information and participate in charity events in order to get any help
177 | * **US-2.11:** As a Low-income I want to see minimal data in my user interface in order not to lose the necessary information
178 | * **US-2.12:** As a User I want a better user interface so that i can easy find friends, posts and groups with useful information
179 | * **US-2.13:** As a User I need to get notifications in order to be aware of all interesting events
180 | * **US-2.14:** As a Doctor I want to share my docs and videos in order to organize better education and communication process
181 | * **US-2.15:** As a Doctor I want to have an opportunity to sell extended consultations in order to receive income from participation
182 | * **US-2.16:** As a User I need review of my individual set of posts in order to get relevant information
183 | * **US-2.17:** As a Doctor I need an intelligent chatbot so that it suggest me some recommendations based on established medical rules so that users will not receive "harmful advice"
184 |
185 | **Security**
186 | * **US-3.1:** As a User I want to be sure that my data is in safe and will not get to third parties
187 | * **US-3.2:** As a Product Owner I want to be sure that post, articles and blogs do not contain negative and illegal content in order not to cause negativity
188 | * **US-3.3:** As a User I want to authorise using my Farmacy Food login so that i don't need to spend time to another registration process
189 | * **US-3.4:** As a User I want to authorise using Facebook or Google login so that not to spend efforts to remember my Farmacy Family login and password
190 | * **US-3.5:** As a Low-income I want to have an opportunity to use application in a fast manner with simple authentication process
191 |
192 | **Webinars**
193 | * **US-5.1:** As a Low-Income I want to get free consultation with a doctor so that i can receive medical care
194 | * **US-5.2:** As a Doctor I need to have an opportunity to create webinars in order to educate Farmacy Family users
195 | * **US-5.3:** As a Doctor I want to conduct consultations online in order to interact more effectively with the patient
196 | * **US-5.4:** As a User I want to get free or paid consultations with a doctor or a Dietician
197 |
198 | **Data analytics**
199 | * **US-6.1:** As a Product Owner I want there to be a collection of geography data so that they are transferred to the Farmacy Family and used to optimize deliveries to refrigerators and reduce waste
200 | * **US-6.2:** As a Product Owner I want to collect more analytical data in order to improve the Farmacy Food service
201 | * **US-6.3:** As a Product Owner I want to know which transactional clients have become involved in order to apply incentives to them
202 | * **US-6.4:** As a Client i want to be able to keep a food diary in order to receive individual recommendations on my taste preferences
203 |
204 | **Others**
205 | * **US-7.1:** As a Product Owner I want to negotiate a partnership with clinics in order to interact effectively
206 | * **US-7.2:** As a Product Owner I want to make an order from Farmacy Family in order not to go to another site
207 |
208 | ## Target Architecture
209 | Here you find the documentation of the software architecture that we envision to address Farmacy Family's user requirements.
210 |
211 | We distilled several key functional areas of Farmacy Family System:
212 | * Engagement of Transactional Customer using questionnaire
213 | * Rich user profile (including medical data)
214 | * Social Network with blogs, forums, posts, events, chats, media, groups, subscriptions, etc
215 | * Webinars for education and online meetings
216 | * Notifications through SMS, email and Push
217 | * Integration with clinics and Farmacy Food System
218 | * Data analysis for food and health recommendations and optimizations of deliveries to refrigerators and reduce waste
219 | * Statistics and reports
220 |
221 | 
222 |
223 | Based on [primary goals](#primary_goals), [constraints](#constraints) and formalized [user stories](#user_stories), we extracted the following architecture views of Farmacy Family system design seen below. These views provide a contextual perspective of the system, showing mid-level building blocks and connectors which altogether correspond to the main capabilities provided by the Farmacy Family system.
224 |
225 | We also investigated how UIs of the Farmacy Family might look like and develop several [UI prototypes](pages/ui.md) of web and mobile client applications.
226 |
227 | ### Context
228 | There's a context diagram that gives an overview of the external elements that interact with what we called the Farmacy Family System, which is the scope of this software architecture.
229 |
230 | 
231 |
232 | ### Containers
233 | The containers diagram shows the mid-level viewpoint of the software architecture and how containers communicate with one another and with external services.
234 |
235 | 
236 |
237 | From the list of functional requirements and taking into account ADR, this architecture can provide all the necessary functionality.
238 |
239 | We intentionally drew a C4 model container diagram including the Farmacy Food system to show integrations with its subsystems and components which we are going to reuse in the new Farmacy Family system.
240 |
241 | Farmacy Family system contains of several services:
242 | * **Web and mobile applications** - we incorporate new Farmacy Family functionality into existing Farmacy Food applications (see [ADR-5](adrs/ADR-5:%20Incorporate%20new%20functionality%20into%20Farmacy%20Food%20Mobile%20and%20Web%20Apps.md)).
243 | * **Social Network Module** - contains blogs, forums, posts, events, chats, media, groups, subscriptions, etc (see [ADR-3](adrs/ADR-3:%20Social%20network%20capabilities.md))
244 | * **Customer profile Module** - contains user sensitive personal and medical data
245 | * **Webinars Module** - education and online meetings (see [ADR-4](adrs/ADR-4:%20Webinars%20capability.md))
246 | * Data analysis and recommendations Modules:
247 | * **eDietician Module** - see [dataflow description](pages/edietician.md)
248 | * **Inventory Replenishment Module** - see [ADR-9](adrs/ADR-9:%20Inventory%20Replenishment%20Module.md)
249 | * **Users Engagement Analysis Module** - see [ADR-11](adrs/ADR-11:%20Data%20analysis%20capability.md) Data analysis capability
250 |
251 | We also could reuse some Farmacy Foods services:
252 | * **Auth Module** - authentication, authorization and SSO (Single Sign On)
253 | * **Reporting Module** - generates different types of business reports
254 | * **Event Streaming System** - for collecting events from all modules and it uses as an integration layer between Farmacy Family compopents
255 | * **S3 Storage** - central data storage, which could store all the information including historical data and BLOBs
256 | * **Notification Module** - for sending SMS, emails and Push notifications (see [ADR-8](adrs/ADR-8:%20Notifications.md))
257 | * **Tracing and Monitoring Module** - for supporting infrastructure, network, and security monitoring, monitor, troubleshoot, and optimize application performance and also search, filter, and analyze our logs (see [ADR-7](adrs/ADR-7:%20Observability.md))
258 |
259 | These functional areas can be prioritized using a Domain Driven Design approach in order to have a good understanding of priorities and assumptions for various [subdomains](pages/subdomains.md).
260 |
261 | ### Assumptions
262 | We define several assumptions as knowledge taken for granted or accepted as true without evidence.
263 | * **ASM-1:** We assume that we have access to Machine Learning expertise
264 | * **ASM-2:** Development team is relatively small, and the proposed solution should enable fast time-to-market and ease of changes
265 | * **ASM-3:** Development team is cross-functional and have experience with major technologies available on the market - modern software development skills, microservices, AWS, etc
266 | * **ASM-4:** Don't need to purchase something in Farmacy Food to be a part of Farmacy Family
267 | * **ASM-5:** AWS is the target platform for deployment because we could use Farmacy Food team expertise
268 | * **ASM-6:** We assume that Farmacy Food mobile applications developed native (Swift for iOS and Kotlin or Java for Android)
269 | * **ASM-7:** Client web application developed on modern stack (Vue, React or Angular)
270 | * **ASM-8:** Helpdesk will work 8/5. We need simple Q&A pages for general questions.
271 | * **ASM-9:** We assume under 1000 Farmacy Food registered users
272 | * **ASM-10:** About 100 purchases a day
273 |
274 | We described some metrics based on some market research:
275 | * 30-50 groups per month
276 | * 20-40 posts per month per user
277 | * 80-100 chat messages per users per day
278 | * 5-10 webinars per month per user
279 |
280 | We also tried to estimate the volumes of [stored and transmitted data](pages/data.md) based on the metrics described above to determine the size of the future infrastructure.
281 |
282 | ### Significant Quality Attributes
283 | The target architecture must support goals, user scenarios and constraints described above while satisfying the quality attributes listed in this section. There are some global quality attributes and also there are several individual QAs for certain parts of the system.
284 |
285 | **Global**
286 | * **QA-1:** Interoperability
287 | * We need to incorporate new functionality into the existing Farmacy Food reactive UI - web and mobile applications
288 | * The system must be able to integrate with different services including social networks, clinics, web-conferencing, etc
289 | * **QA-2:** Elasticity
290 | * Because we actually can not predict the real count of user registrations in Farmacy Family application during future marketing campaigns, we need ability to
291 | * **QA-3:** Reliability
292 | * The system must be available during 24/7 and the user interface has to be continuously available with the exception of small maintenance windows during low traffic times.
293 |
294 | **Profile**
295 | * **QA-4:** Security
296 | * User personal data must be protected via encryption mechanisms in all communication channels.
297 | * User personal data (including medical data) must be protected via encryption or access control wherever it is stored or manipulated.
298 | * Health data is sensitive data and should also be carefully considered. Consulting should be used to ensure compliance with regulatory requirements e.g. PCI for credit cards or HIPAA for health data.
299 |
300 | **Web and mobile applications**
301 | * **QA-5:** Usability
302 | * Farmacy Food is startup and we need a large number of users satisfied with the quality of our service in general and especially in Mobile and Web user interface experience
303 | * **QA-6:** Modifiability
304 | * User requirements dictate us that Farmacy Family users should get a lot of social media functionality. So we need an approach to modify it fast according to clients wishes and our goals.
305 |
306 | **Social Network**
307 | * **QA-7:** Modifiability
308 | * User requirements dictate a lot of new functionality (Blogs, Forums, Chats and more). Also we assume request for modification of this functionality and also possibility for adding new modules
309 | * **QA-8:** Security
310 | * In the design phase of Social Network module development, we should design security functions to satisfy the security properties of assets identified in the requirement phase. Specifically, we can design such functions using access control, authentication, cryptography, electronic signatures, and logging components.
311 |
312 | **Webinars**
313 | * **QA-9:** Performance
314 | * System should hold high performance during online education and meetings using a web-conference system
315 | * **QA-10:** Usability
316 | * It is necessary to suggest a high quality user interface for webinars functionality
317 |
318 | **Data Analysis and Recommendations Modules**
319 | * **QA-11:** Security
320 | * Predictive analytics modules will operate with sensitive data. We need a high level of sensitive data security.
321 | * **QA-12:** Modifiability
322 | * We need a powerful but easy-to-use toolkit for creating and modifying ML models on-demand.
323 |
324 | We placed all identified Significant Quality Attributes on top of our container diagram during the QA workshop:
325 |
326 | 
327 |
328 | ### Deployment
329 | The deployment diagram illustrates how the system containers are mapped to the AWS infrastructure:
330 |
331 | 
332 |
333 | As stated in the Target container diagram we propose to use AWS Managed Streaming for Apache Kafka for synchronous and asynchronous calls between our services.
334 |
335 | We could use AWS S3 as a central datastore for assets, data for Artificial Intelligence Modules and bucketsbucket for our Farmacy Food and Farmacy Family backups.
336 |
337 | We propose to use additional API layer with AWS API Gateway before Web and Mobile apps for additional security, Insulates the clients from how the application is partitioned into services, reduces the number of requests/roundtrips, etc
338 |
339 | We place the Social Network Module application engine into AWS EC2 Container and connect it to the RDS Database for storing all domain-specific information. For storing assets and user files we propose to use AWS S3 buckets.
340 |
341 | Inventory Replenishment Module and eDietary Module. All modules related to artificial intelligence based on serverless computing approach and requires services such as AWS Forecast, AWS Lambda, AWS RDS for storing relational data and AWS DynamoDB for NoSQL.
342 |
343 | Users Engagement Analys module requires such services as AWS Glue for ETL operations and AWS Authena for data analysis (see [ADR-11](adrs/ADR-11:%20Data%20analysis%20capability.md) Data Analysis Capability).
344 |
345 | Profile Module should use Lambda for computing and AWS RDS for storing data.
346 |
347 | Clinics Gateway Module is useduses for secure communication between clinics and Farmacy Familyour system and consists of AWS Lambda for computing, DynamoDB for storing data and also AWS API Gateway. It also requires a secure VPN connection with AWS Transit Gateway.
348 |
349 | We have prepared a list of all the necessary [services](pages/Infrastructure_register.md) for your convenience.
350 |
351 | The [Multi-zone approach](pages/multizone_approach.md) will be used to allow redundancy of critical data and high availability on the next step of the project.
352 |
353 | ### Risks
354 |
355 | These are the possible business and technical risks which we tried to highlight below.
356 |
357 | #### Business risks
358 |
359 | * **BR-1:** There are a lot of public social networks on the Internet. You can create groups in them, share information. The competition is quite high.
360 | * **BR-2:** Not everyone can have access to proper nutrition, because this is a rather expensive topic.
361 | * **BR-3:** Homeless and low-income people will not be able to use the system.
362 | * **BR-4:** Doctors will not be interested in free care.
363 | * **BR-5:** Users will create communities to advertise medicines, clinics.
364 | * **BR-6:** Users will create communities aimed at agitation (for example, a community against vaccinations).
365 | * **BR-7:** People will perceive the community negatively and stop being customers.
366 |
367 | #### Compliance risks
368 | * **CR-1:** Advice or recommendation of a nutritionist(s) can cause demonstrable damage to the health of a part of subscribers.
369 | * **CR-2:** Possible leakage of personal information about the client's health (see [Security](#security)).
370 | * **CR-3:** The claim of the nutritional supplement patent holder for illegal disclosure / distribution of the recipe.
371 |
372 | #### Technical risks
373 | * **TR-1:** Risk of significant increase in system load during some marketing campaigns. That’s because we can’t predict the quantity of registrations. We got information during Q&As that it’s possible to join the Farmacy Family community without any purchases (see [Deployment](#deployment) chapter).
374 | * **TR-2:** It’s could be quite hard to implement new functionality into Farmacy Food mobile and web applications
375 | * **TR-3:** With an increase in the number of users, Community Admin will not be enough to track banned content.
376 | * **TR-4:** Attackers can hack our system and steal sensitive data (see [Security](#security)).
377 |
378 | ### Supporting constant change
379 |
380 | Everything changes eventually and some things may change by taking the initiative as an organization, other things will have to change involuntarily. There are two kinds of change Farmacy Family will have to deal with:
381 | * **Business-driven change:** This covers new revenue models, competitors, new channels, changing customer needs, market regulation and product innovation, discovered by Product Owner or Analytics. These change the business requirements and use cases you are addressing with your architecture.
382 | * **Ecosystem change:** Some changes in programming languages, libraries, framework tools and operating environments change.
383 |
384 | We tried to follow several common characteristics of evolutionary architectures in our solution:
385 | * **Modularity and Coupling:** We tried to separate components of our system along well defined boundaries to make a non-breaking change. Of course we could decompose for example Social Network Module much deeper, but this is a Trade Off. The overall cost of development and support will be much higher. Maybe it could be reasonable on the next steps of this project.
386 | * **Organized Around Business Capabilities:** Farmacy Family architecture features modularity at the domain architecture level.
387 | * **API:** By using API layer for interacting with the applications, various data and functionality can be easily accessed by UIs (see [API Gateway pattern](https://microservices.io/patterns/apigateway.html)). By using a unified message broker (Kafka event streaming platform) various data and functionality can be easily accessed by various services in different subdomains.
388 | * **Cloud:** by using Amazon PaaS and SaaS solutions Farmacy Family architecture can take full advantage from typical cloud benefits like scalability, resilience and high-availability (see [ADR-10](adrs/ADR-10:%20Cloud%20provider.md) and [Deployment](#deployment)).
389 | * **Experimentation:** Operationally inexpensive trivial change to applications allows common Continuous Delivery practices like A/B testing, Canary Releases, and others (especially for our Data Analysis Modules and Web and Mobile Apps development).
390 | * **Monitoring and tracing tools:** we could track important characteristics of a system using these tools. Examples include levels of uptime, throughput, availability and security needed (see [ADR-7](adrs/ADR-7:%20Observability.md) Observability).
391 |
392 | ### Security
393 |
394 | To avoid some risks of system hacking or data theft we suggest to maintains security with the following solutions:
395 |
396 | #### Authentication and authorization
397 | Amazon Cognito provides solutions to control access to AWS resources from mobile and web apps using common identity management standards including OpenID Connect, OAuth 2.0, and SAML 2.0. It also helps protect our application users from unauthorized access to their accounts using compromised credentials.
398 |
399 | #### Encryption
400 | Our data will be encrypted with 256-bit Secure Socket Layer (SSL) technology, which applies whether you’re on a desktop, laptop, tablet, or phone. We use cryptographic keys to authenticate data.
401 |
402 | #### AWS cloud features
403 | [AWS Cloud Compliance](http://aws.amazon.com/compliance) enables the controls in place at AWS to maintain security and data protection in the cloud.
404 |
405 | The IT infrastructure that AWS designed and managed in alignment with variety of IT security standards. The following is a partial list of assurance programs with which AWS complies:
406 | * SOC 1/ISAE 3402, SOC 2, SOC 3
407 | * FISMA, DIACAP, and FedRAMP
408 | * PCI DSS Level 1
409 | * ISO 9001, ISO 27001, ISO 27017, ISO 27018
410 |
411 | #### Self-testing
412 | We are going to regularly run tests on our own software: scan our ports, test for SQL injection, and block cross-site scripting to ensure that all our security measures are working as they should be. ([https://github.com/Netflix/SimianArmy](https://github.com/Netflix/SimianArmy))
413 |
414 | #### Private subnets
415 | We use private subnets for our instances to protect from being accessed directly from the internet. For more information see [Deployment](#deployment).
416 |
417 | #### Customer authorisation form
418 | For additional information see [ADR-6: Sensitive data access](adrs/ADR-6:%20Sensitive%20data%20access.md)
419 |
420 | #### Third party auditing
421 | We should be regularly audited by third party penetration testers to ensure we’re meeting compliance standards.
422 |
423 | # Architecture design records
424 | - [ADR-1](adrs/ADR-1:%20Architecture%20design%20record%20style.md) Architecture design record style
425 | - [ADR-2](adrs/ADR-2:%20Service-based%20architecture%20style%20approach.md) Service-based architecture style approach
426 | - [ADR-3](adrs/ADR-3:%20Social%20network%20capabilities.md) Social network capabilities
427 | - [ADR-4](adrs/ADR-4:%20Webinars%20capability.md) Webinars capability
428 | - [ADR-5](adrs/ADR-5:%20Incorporate%20new%20functionality%20into%20Farmacy%20Food%20Mobile%20and%20Web%20Apps.md) Incorporate new functionality into Farmacy Food Mobile and Web Apps
429 | - [ADR-6](adrs/ADR-6:%20Sensitive%20data%20access.md) Sensitive data access
430 | - [ADR-7](adrs/ADR-7:%20Observability.md) Observability
431 | - [ADR-8](adrs/ADR-8:%20Notifications.md) Notifications
432 | - [ADR-9](adrs/ADR-9:%20Inventory%20Replenishment%20Module.md) Inventory Replenishment Module
433 | - [ADR-10](adrs/ADR-10:%20Cloud%20provider.md) Cloud provider
434 | - [ADR-11](adrs/ADR-11:%20Data%20analysis%20capability.md) Data analysis capability
435 |
436 | # Additional resources
437 |
438 | ### Extra requirements based on Q&As
439 | We have got some additional information during our [Question and Answers](pages/question_and_answers.md) session with the Product Owner.
440 |
441 | ### Glossary
442 | * **Transactional Customer** - Farmacy Foods customer
443 | * **Engaged Customer** - customers for whom a regular customer relationship or business relationship is not established
444 | * **Support Community** - engaged members within a community of Farmacy Food
445 | * **Community** - small group of engaged customers within a neighborhood area
446 | * **Ghost Kitchen** - system responsible for order execution and food refillment
447 | * **PoS** - point of sales
448 | * **eDietician** - "Expert system" that will provide personalized meal recommendations
449 | * **HIPAA** - US Health Insurance Portability and Accountability Act
450 | * **API** - Application programming interface
451 | * **UX** - User Experience
452 | * **UI** - User Interface
453 | * **CI/CD** - Continuos Integration/Continuos Delivery
454 | * **ADR** - Architecture Decision Record
455 | * **SSO** - Single Sign On
456 | * **AWS** - Amazon Web Services
457 | * **VPN** - Virtual Private Network
458 | * **SSL** - Secure Sockets Layer
459 | * **SAML** - Security Assertion Markup Language
460 | * **OAuth** - Open Authorization is an open standard for access delegation
461 |
462 | ### Links
463 | * Kata Board in Miro: [miro.com](https://miro.com/app/board/o9J_lp0sOG0=/)
464 | * Video presentaion: [youtube.com](https://youtu.be/NENcmM48n-M)
465 | * Document in PDF Format: [download](docs/farmacy_family_arch_kata.pdf)
466 | * O’reilly architectural katas: [Architectural Katas](https://learning.oreilly.com/live-training/courses/architectural-katas/0636920458463/)
467 | * Information about ADRs: [adr.github.io](https://adr.github.io/)
468 | * Training and resources about software architecture: [developertoarchitect.com](https://www.developertoarchitect.com/)
469 |
--------------------------------------------------------------------------------
/adrs/ADR-10: Cloud provider.md:
--------------------------------------------------------------------------------
1 | ## ADR-10: Cloud provider
2 |
3 | ### Date:
4 | 2021-10-30
5 |
6 | ### Status:
7 | Proposed
8 |
9 | ### Context:
10 | The chosen architecture style: service-based architecture - implies that there will be several deployment units. The solution is designed for horizontal scalability, so we want to use features such as load balancing and load-based scaling. We would also like to use some solutions for managed databases. We tolerate multi-user rentals and other consequences of cloud solutions.
11 |
12 | So, there are no reasons not to deploy our solutions to Amazon Web Services cloud as for the Farmacy Food solution.
13 |
14 | ### Decision:
15 | * Deploy application components as well as databases to an AWS cloud.
16 | * Reuse Farmacy Foods services such as
17 | * Consider AWS as a cloud provider for our services
18 |
19 | ### Consequences:
20 | * Utilize solutions from Farmacy Food project
21 | * We are getting cost-efficient and stable infrastructure platform with ability to scale
22 | * New development and delivery pipelines will be setup for new services
23 |
24 | For deployment view see deployment diagram.
--------------------------------------------------------------------------------
/adrs/ADR-11: Data analysis capability.md:
--------------------------------------------------------------------------------
1 | ## ADR-11: Data analysis capability
2 |
3 | ### Date:
4 | 2021-11-14
5 |
6 | ### Status:
7 | Proposed
8 |
9 | ### Context:
10 | We propose to choose Amazon data analysis services for Users Engagement Analysis Module. There are two options: Amazon Athena and Amazon Redshift.
11 |
12 | Athena is a serverless service and does not need any infrastructure to create, manage, or scale data sets. It works directly on top of Amazon S3 data sets. It creates external tables and therefore does not manipulate S3 data sources, working as a read-only service from an S3 perspective.
13 |
14 | On the other hand, Redshift is a petabyte-scale data warehouse used together with business intelligence tools for modern analytical solutions. Unlike Athena, Redshift requires a cluster for which we need to upload the data extracts and build tables before we can query.
15 |
16 |
17 |
18 |
19 | |
20 | RedShift
21 | |
22 | Athena
23 | |
24 |
25 |
26 | Partitioning
27 | |
28 |
29 |
30 |
31 | - Does not support direct partitioning by default
32 |
33 |
- Uses predefined distribution keys to optimize tables for parallel processing
34 |
35 |
- Poor manual partition key selection can dramatically impact query performance, so Redshift does it for you
36 |
37 |
38 | |
39 |
40 |
41 |
42 | - Can partition by any key with up to 20,000 per table
43 |
44 |
- Supports several Serializer/Deserializer (SerDe) libraries for parsing data from different data formats: CSV, JSON, TSV, and Apache logs
45 |
46 |
- Does not support arrays or object identifier types
47 |
48 |
49 | |
50 |
51 |
52 | User Defined Functions
53 | |
54 |
55 |
56 |
57 | - Supports UDFs with scalar and aggregate functions
58 |
59 |
60 | |
61 |
62 |
63 |
64 | - Does not support UDFs
65 |
66 |
67 | |
68 |
69 |
70 | Data Formats and Types
71 | |
72 |
73 |
74 |
75 | - Supports several Serializer/Deserializer (SerDe) libraries for parsing data from different data formats: CSV, JSON, TSV, and Apache logs
76 |
77 |
- Does not support arrays or object identifier types
78 |
79 |
80 | |
81 |
82 |
83 |
84 | - Supports several Serializer/Deserializer (SerDe) libraries for parsing data from different data formats: CSV, JSON, TSV, Parquet, and ORC
85 |
86 |
- Beneficial due to Athena’s convenient data to query structure
87 |
88 |
- Supports complex data types like arrays, maps, and structs
89 |
90 |
91 | |
92 |
93 |
94 | Infrastructure
95 | |
96 |
97 |
98 |
99 | - Requires a cluster to set itself up. A significant amount of time is required to prepare and set up the cluster. Once the cluster is ready to use, we need to load data into the tables. This also comes with a lag time depending on the amount of data being loaded.
100 |
101 |
102 | |
103 |
104 |
105 |
106 | - Free from all such dependencies as it does not need infrastructure at all. It just creates its own external tables on top of Amazon S3 data sets.
107 |
108 |
109 | |
110 |
111 |
112 | Pricing
113 | |
114 |
115 |
116 |
117 | - Based on type and number of nodes in a cluster
118 |
119 |
- Hourly rate for both dense compute nodes and dense storage nodes
120 |
121 |
- Predictable price with no penalty on excess queries, but can increase overall cost with fixed compute (SSD) and storage (HDD)
122 |
123 |
124 | |
125 |
126 |
127 |
128 | - Price is per terabyte of data scanned during a query execution
129 |
130 |
- Minimum of 10 megabytes per query execution
131 |
132 |
- No charge for failed queries
133 |
134 |
- Most cost effective when data is compressed, partitioned, or converted to columnar format
135 |
136 |
137 | |
138 |
139 |
140 |
141 |
142 | ### Decision:
143 | We propose to use AWS Glue with AWS Athena for data analysis capability. Amazon Athena is noteworthy due to its simple yet efficient quality. No initial set up is required which makes ad hoc querying easy. It’s practical for simple read and aggregated queries and is relatively cost effective. Generally, Athena works best for quickly and conveniently running queries at a low cost without needing to set up a complex infrastructure. We don’t need all the possibilities and complexity of the Redshift solution on this step.
--------------------------------------------------------------------------------
/adrs/ADR-1: Architecture design record style.md:
--------------------------------------------------------------------------------
1 | ## ADR-1: Architecture design record style
2 |
3 | ### Date:
4 | 2021-10-23
5 |
6 | ### Status:
7 | Accepted
8 |
9 | ### Context:
10 | We need to record the architectural decisions made on this project.
11 |
12 | ### Decision:
13 | We will use Architecture Decision Records, as [described by Michael Nygard](http://thinkrelevance.com/blog/2011/11/15/documenting-architecture-decisions).
14 |
15 | ### Consequences:
16 | * We have a nice start to document our architectural solutions
17 | * Maybe the structure of Michael Nygards ADR format could be not enough for some cases.
--------------------------------------------------------------------------------
/adrs/ADR-2: Service-based architecture style approach.md:
--------------------------------------------------------------------------------
1 | ## ADR-2: Service-based architecture style approach
2 |
3 | ### Date:
4 | 2021-10-24
5 |
6 | ### Status:
7 | Proposed
8 |
9 | ### Context:
10 | The current Farmacy Food system style is a modularised monolith system with all components in a single deployable service. This structure would have probably been chosen for its simplicity and cost efficiency.
11 |
12 | This monolith structure is however causing the following business impact:
13 | * Change is difficult, it takes too long and something else usually breaks.
14 | * Hard to maintain, observe and test.
15 | * It is hard to change the data structure, since it has multiple dependencies.
16 | * Same service and database is used for different kinds of requirements i.e. for reporting and real-time transactions. This causes issues in both functionalities.
17 |
18 | We believe that the functionality of the Farmacy Family system is more fragmented, but using a microservice approach is not advisable.
19 |
20 | ### Decision:
21 | We see that different parts of the Farmacy Family system have different architectural requirements (quality attributes).
22 |
23 |
24 |
25 | * The customer interacts with unified for Farmacy Food and Farmacy Family web and mobile applications also with web conferencing module UI (incorporated in main apps with APIs). These parts have to be usable and changeable to avoid customer frustration (see QA-5 and QA-5)).
26 | * Another significant part of our system is the Social Network Module. It contains a lot of components which should be closely related to each other and it could be hard to maintain this with a microservice approach.
27 | * Third part of our system is the Customer profile Module. It must be secure (see QA-4).
28 | * Webinars Module should be usable and productive and we suppose not to infest in development in that case (You can read our arguments in ADR-4: Webinars capability)
29 | * And finally we need eDietician Module, Inventory Replenishment Module and Users engagement analysis module. These modules are based on AI mechanics and should be modifiable and secure as well (see QA-10 and QA-11).
30 |
31 | This makes it clear that we need to break the monolith. The communication between these modules needs to be both synchronous and asynchronous.
32 |
33 | Evaluating the functional modules that need to be implemented, as well as the architectural principles that fulfil our functional and architectural requirements, we have two main candidates: service-based and microservice architecture.
34 |
35 | Service-based architecture give us several benefits:
36 | * macro-services resolves orchestration and transactional issues
37 | * allows for non-transactional orchestration of services
38 | * allows for protocol-agnostic heterogeneous interoperability
39 | * allows for transformation of contract differences
40 | * database scope improves performance due to fewer remote calls
41 | * refactoring entire database may not be feasible or possible
42 |
43 | Also, there are some cons:
44 | * change control becomes more difficult
45 | * looser bounded context of services
46 | * tighter service coupling based on schema database scope
47 | * schema changes become expensive and difficult
48 | * decrease in overall performance
49 |
50 | This comparison is based on Neal Ford's presentation “Comparing Service-Based Architectures”.
51 |
52 | Microservices could add a lot of complexity than a service-based approach for development teams. Each microservice has its own API, which apps rely on to be consistent. For microservices architecture we have more pricey hosting infrastructure with security and maintenance support, and also development teams should be more skilled and expensive.
53 |
54 | We suggest choosing a good compromise between monolith and microservices: service-base architecture style with number of backend services, holistic UI (Web and Mobile), event-drived integration approach with Kafka service and central simple object storage for both Farmacy Food and Farmacy Family systems.
55 |
56 | 
57 |
58 | **Consequences**
59 | * Quicker solution to compliance with our goals and requirements
60 | * Comprehensible and manageable migration
61 | * Much higher maintainability and testability leading to more stable system
62 | * Manageable coarse grained services
--------------------------------------------------------------------------------
/adrs/ADR-3: Social network capabilities.md:
--------------------------------------------------------------------------------
1 | ## ADR-3: Social network capabilities
2 |
3 | ### Date:
4 | 2021-10-28
5 |
6 | ### Status:
7 | Proposed
8 |
9 | ### Context:
10 | Based on the requirements provided by Product Owner we need to develop new social functionality such as groups, profiles, blogs, messages, etc.
11 |
12 | ### Decision:
13 | We have analyzed several approaches durings our research:
14 | * Develop all functionality on a low level using popular frameworks like Django, Spring, Ruby on Rails or Laravel.
15 | * Integrate several different open source social tools in one holistic solution - social network platform.
16 | * Choose a high quality open source prepared for production social network platform with good quality, documentation, modern stack and ability to make changes.
17 |
18 | We propose a third one because there are no reasons to build such a system from scratch: it is a tedious process with a lot of risks. The way of integration is quite risky too because we need really close integration between components and researching appropriate components may take a long time.
19 |
20 | According to functional requirements and assumptions (see ASM-9 and ASM-10) we don’t need a global social network with millions of users. Owner requests are much more modest. According to our constraints (see CON-3 and CON-4) we have some limitations in budget, time for development.
21 |
22 |
23 | We analyzed several social network engines:
24 | * [SocialEngine](https://www.socialengine.com/)
25 | * [Ning](https://www.ebool.com/alternatives/ning)
26 | * [Zoho Connect](https://www.ebool.com/alternatives/zoho-connect)
27 | * [Elgg](https://www.ebool.com/alternatives/elgg)
28 | * [HumHub](https://www.ebool.com/alternatives/humhub)
29 | * [JomSocial](https://www.ebool.com/alternatives/jomsocial)
30 | * [Oxwall](https://www.oxwall.com/)
31 | * [Jcow](https://www.jcow.net/)
32 | * [Bitrix24](https://www.bitrix24.com/)
33 |
34 | We propose the [HumHub](https://www.humhub.com/en) platform because of the benefits listed below.
35 | * All necessary functionality for Farmacy Family out of the box - it’s an open-source social network kit that offers the tools to make communication, interaction and collaboration.
36 | * Provides a powerful modular platform based on the Yii2 Framework (which is organized according to the MVC architectural pattern).
37 | * Free to use (but with ability to use vendor support)
38 | * Self hosted (could be easily hosted on AWS EC2 instances)
39 | * Headless installation and maintenance
40 | * Highly customizable
41 | * Custom theme support
42 | * Custom module development support
43 | * Many configuration and fine tuning options
44 | * Possibilities for changing core modules
45 | * Well documented REST API
46 | * Open source
47 | * Transparent development process
48 | * Community support and contribution
49 | * Direct contact to the core development team
50 | * Many eyes principle
51 | * Translated into more than 40 languages
52 | * Marketplace for modules and themes (most of them are free for use)
53 | * User-friendly interface
54 |
55 | ### Consequences:
56 | Could be not enough flexible for our purposes
--------------------------------------------------------------------------------
/adrs/ADR-4: Webinars capability.md:
--------------------------------------------------------------------------------
1 | ## ADR-4: Webinars capability
2 |
3 | ### Date:
4 | 2021-10-29
5 |
6 | ### Status:
7 | Proposed
8 |
9 | ### Context:
10 | We are convinced that developing webinars capability from scratch is not the best idea, because it is quite difficult, risky and expensive. Therefore, we offer a seamless connection of a ready-made solution to the Farmacy Family system.
11 |
12 | Choosing a proper online webinar platform is difficult sometimes as things can go wrong anytime during the webinar. Weak network, download issue, unclear audio, non-HD video, and whatnot. While selecting a webinar hosting platform, we need to make sure to consider the several aspects:
13 | * Is it fulfilling our requirements?
14 | * Does it have necessary APIs for full integration with the Farmacy Family system?
15 | * How many participants can join our webinar?
16 | * How cranky downloads and extensions are?
17 | * What is the price? Is it reasonable?
18 |
19 | We have reviewed several popular platforms and prepared a comparison table.
20 |
21 |
22 | Name
23 | |
24 | Pros
25 | |
26 | Cons
27 | |
28 | Price
29 | |
30 | Rating
31 | |
32 |
33 |
34 | Demio
35 | |
36 |
37 |
38 |
39 | - Automatic, cloud-based events and recordings
40 |
41 |
- Chats, handouts, and polls with enjoyable waiting room experience
42 |
43 |
- Built-in robust analytics and insights
44 |
45 |
- Easy-to-integrate marketing tools
46 |
47 |
- Email automation plus event reminders
48 |
49 |
50 | |
51 |
52 |
53 |
54 | - Price is on the higher end for more than 50 live participants.
55 |
56 |
- No registration page conversion analytics, so it cannot be determined how many did not register, for instance.
57 |
58 |
59 | |
60 | Starter Plan costs $34/month for a 50-person room
61 | |
62 | 8 of 10
63 | |
64 |
65 |
66 | WebinarJam
67 | |
68 |
69 |
70 |
71 | - Automatic recording
72 |
73 |
- Excellent customer support
74 |
75 |
- Social media integrations like Facebook
76 |
77 |
- Handle multiple attendees easily
78 |
79 |
- Compatible with various browsers and OS
80 |
81 |
- Incorporate polls and surveys with webinar
82 |
83 |
84 | |
85 |
86 |
87 |
88 | - Needs purchase of EverWebinar for automated on-demand webinars
89 |
90 |
- Occasionally video and sound delay up to a couple of seconds
91 |
92 |
- Lacking integration with third-party AV tools
93 |
94 |
95 | |
96 | Basic Plan costs $499/year or $41.58/month for up to 500 participants per webinar and 3 presenters.
97 | |
98 | 8 of 10
99 | |
100 |
101 |
102 | EverWebinar
103 | |
104 |
105 |
106 |
107 | - Switch between WebinarJam and EverWebinar in one click
108 |
109 |
- Fake your audience count
110 |
111 |
- Show performance stats in real-time
112 |
113 |
- Convert previous live events to evergreen events
114 |
115 |
- Just-in-time online events start right upon registration
116 |
117 |
- An advanced scheduling system that blocks out unavailable dates
118 |
119 |
- Auto-detection of time zone
120 |
121 |
- Unlimited free hosting through cloud-based servers
122 |
123 |
124 | |
125 |
126 |
127 |
128 | - A few complaints about streaming on mobile
129 |
130 |
131 | |
132 | Monthly Plan $99/mo
133 | |
134 | 7 of 10
135 | |
136 |
137 |
138 | Livestorm
139 | |
140 |
141 |
142 |
143 | - Access easy to set-up adaptable webinar themes
144 |
145 |
- Interactive experience with chats, polls, questions, and more
146 |
147 |
- Integration and analysis of meetings
148 |
149 |
- High-level automation and webinar sequences
150 |
151 |
- Comprehensive, multi-language customer support.
152 |
153 |
- Detailed attendance analytics, source tracking, replay analytics, and participation report
154 |
155 |
- Unlimited storage of recording
156 |
157 |
158 | |
159 |
160 |
161 |
162 | - The host’s internet connection influences video and audio performance
163 |
164 |
- Occasional blurry and pixelated display
165 |
166 |
- Spotty customer support at times
167 |
168 |
- No offers on replay; offers done on live are lost on replay
169 |
170 |
- There’s not way to re-open pop-ups
171 |
172 |
- Email reminder is uncustomizable
173 |
174 |
175 | |
176 | Webinar Premium costs $99/host/month with a 4-hour limit per webinar
177 | |
178 | 5 of 10
179 | |
180 |
181 |
182 | Crowdcast
183 | |
184 |
185 |
186 |
187 | - Easy to get started
188 |
189 |
- Go live or attend on any device
190 |
191 |
- Has a separate tab for public chat and for asking questions.
192 |
193 |
- Easy invite feature
194 |
195 |
- Presenters can multi-stream on Facebook and Youtube.
196 |
197 |
- Very interactive (Polls, Analytics, Question & Answer)
198 |
199 |
- A good option for people who are new in marketing or live streaming.
200 |
201 |
- The audience can chat and ask questions even before the live starts.
202 |
203 |
204 | |
205 |
206 |
207 |
208 | - The landing page for the audience is not very customizable
209 |
210 |
- Sessions have a limit of 2 hours for starter plans
211 |
212 |
- No multi-user access
213 |
214 |
- Some features are locked on expensive plans.
215 |
216 |
217 | |
218 | Pro $89/mo
219 | |
220 | 6 of 10
221 | |
222 |
223 |
224 | Livestream
225 | |
226 |
227 |
228 |
229 | - Unlimited storage and attendees
230 |
231 |
- Excellent customer support
232 |
233 |
- Privatization of events
234 |
235 |
- Private sharing of link
236 |
237 |
- Extensive in-built robust analytics
238 |
239 |
- Facebook Live or YouTube streaming
240 |
241 |
- Embed webinar to website
242 |
243 |
244 | |
245 |
246 |
247 |
248 | - No audience engagement features such as surveys or polls
249 |
250 |
251 | |
252 | At $42/month, there’s no limit to participants
253 | |
254 | 8 of 10
255 | |
256 |
257 |
258 | WebinarsOnAir
259 | |
260 |
261 |
262 |
263 | - Schedule webinar for up to 50,000 attendees in under a minute
264 |
265 |
- Use “Tracking Pixels” to create “laser-targeted audiences for retargeting”
266 |
267 |
- Live Q&A with live-chats
268 |
269 |
- Allows 10 moderators or speakers at once
270 |
271 |
- Easy webinar registration
272 |
273 |
- in-built opt-in forms
274 |
275 |
- Cloud-based hosting
276 |
277 |
- strong customer service
278 |
279 |
280 | |
281 |
282 |
283 |
284 | - Dependent on Hangouts and may become inaccessible due to changes in Google software
285 |
286 |
287 | |
288 | $99/month for unlimited participants
289 | |
290 | 5 of 10
291 | |
292 |
293 |
294 | DaCast
295 | |
296 |
297 |
298 |
299 | - No viewer limit
300 |
301 |
- Real-time robust analytics
302 |
303 |
- Allows FTP access
304 |
305 |
- Live stream on social media platforms like Facebook
306 |
307 |
- An interactive video on demand (VOD) solution
308 |
309 |
- Easy to set up
310 |
311 |
- User-friendly web conferencing interface
312 |
313 |
- strong customer service
314 |
315 |
316 | |
317 |
318 |
319 |
320 | - $0.15 charge per GB beyond the bandwidth amount or streams will shut off
321 |
322 |
323 | |
324 | The monthly plan starts at $19/month and includes prepaid bandwidth, viewer hours, storage, and support
325 | |
326 | 7 of 10
327 | |
328 |
329 |
330 | Zoom
331 | |
332 |
333 |
334 |
335 | - HD video and audio plus screens sharing
336 |
337 |
- Desktop and app sharing options
338 |
339 |
- Backup meetings in the cloud
340 |
341 |
- Private and public chats, allowing participants to communicate during webinar interruption
342 |
343 |
- Free access to up to 100 participants with 40 mins limit on group meetings
344 |
345 |
- Host controls and virtual whiteboards
346 |
347 |
- Easily navigable dashboard.
348 |
349 |
- No one-time fees
350 |
351 |
352 | |
353 |
354 |
355 |
356 | - The navigating interface can be quite confusing
357 |
358 |
- There are complaints of calls being disconnected
359 |
360 |
361 | |
362 | The business package is $19.99/month and is ideal for small and medium-sized businesses
363 | |
364 | 10 of 10
365 | |
366 |
367 |
368 | Adobe Connect
369 | |
370 |
371 |
372 |
373 | - Various templates to customize for virtual environments.
374 |
375 |
- Create unique registration pages
376 |
377 |
- Reach out to target audience using videos, blogs, surveys, and polls.
378 |
379 |
- Detailed adobe analytics for better insights
380 |
381 |
- Integrates with CRM software such as Eloqua and Salesforce.
382 |
383 |
384 | |
385 |
386 |
387 |
388 | - There are reports of some video and audio disturbances on mobile.
389 |
390 |
391 | |
392 | Meeting Plan starts at $50/month for 25 participants and up to 200 participants for the Learning plan.
393 | |
394 | 6 of 10
395 | |
396 |
397 |
398 |
399 |
400 | ### Decision:
401 | We suppose to integrate Farmacy Family with Zoom for several reasons:
402 | 1. Very stable on all kind of devices
403 | 2. Could integrate this several popular learning management systems (LMS) and makes it easy to schedule a meeting with any course activity
404 | 3. Well documented API with a lot of capabilities for better integration
405 | 4. Reasonable price
406 |
407 | ### Consequences:
408 | For new users it could be quite confusing to use Zoom for the first time
--------------------------------------------------------------------------------
/adrs/ADR-5: Incorporate new functionality into Farmacy Food Mobile and Web Apps.md:
--------------------------------------------------------------------------------
1 | ## ADR-5: Incorporate new functionality into Farmacy Food Mobile and Web Apps
2 |
3 | ### Date:
4 | 2021-10-28
5 |
6 | ### Status:
7 | Proposed
8 |
9 | ### Context:
10 | Based on the constraints provided by Product Owner (CON-1 and CON-2) we need to incorporate new functionality (profile, blogs, webinars, etc) into Family Food mobile and web applications.
11 |
12 | ### Decision:
13 | Based on our assumptions about technological stack (see ASM-6 and ASM-7), we propose to refactor existing iOS and Android App and append such Farmacy Family functionality as p2p and group chats, user profile, community spaces and forums, dietitian feeds. We offer you to add only necessary functions for the mobile version and full functionality for the web version.
14 |
15 | We don't recommend to use web oriented approaches like Cordova for such mobile applications because of the following considerations:
16 |
17 | * **Native Apps Have The Best Performance**: with native mobile app development, the app is created and optimized for a specific platform. As a result, the app demonstrates an extremely high level of performance. Native apps are very fast and responsive because they are built for that specific platform and are compiled using platforms core programming language and APIs.
18 |
19 | * **Native Apps Are More Secure**: web apps rely on different browsers and underlying technologies such as JavaScript, HTML5, and CSS. Developing a native mobile app is a great way to guarantee your users reliable data protection.
20 |
21 | * **Native Apps Are More Interactive And Intuitive**: native mobile apps run much smoother regarding user input and output. These types of apps inherit their devices’ OS interfaces, making them look and feel like an integrated part of the device.
22 |
23 | According to the QA-6 we should provide architectural solutions with the ability to create flexible mobile solutions with a lot of different functionality (Including location data using GPS, camera, microphone, security options, etc). Native mobile development could provide such capability.
24 |
25 | As for web development we propose to use [micro frontends](https://martinfowler.com/articles/micro-frontends.html) approach because of this benefits:
26 | * smaller, more cohesive and maintainable codebases
27 | * more scalable organisations with decoupled, autonomous teams
28 | * the ability to upgrade, update, or even rewrite parts of the frontend in a more incremental fashion than was previously possible
29 |
30 |
31 |
32 | ### Consequences:
33 | The cost may be higher with native mobile app development approach
--------------------------------------------------------------------------------
/adrs/ADR-6: Sensitive data access.md:
--------------------------------------------------------------------------------
1 | ## ADR-6: Sensitive data access
2 |
3 | ### Date:
4 | 2021-10-29
5 |
6 | ### Status:
7 | Proposed
8 |
9 | ### Context:
10 | Based on the requirements provided by Product Owner, Farmacy Family System stores personally identifiable dietary and nutritional information about U.S. citizens and may share this information with 3d-party medical service providers which falls under the purview of Health Insurance Portability and Accountability Act (HIPAA).
11 |
12 | HIPAA requires data at rest to be secured according to NIST 800-111 and data in motion to be secured by NIST 800-52, 800-77, or FIPS140-2, and that legally binding customer authorisation to be provided for 3d-party access to personally identifiable medical data. Farmacy Family System is AWS-based.
13 |
14 | ### Decision:
15 | The Farmacy Family System must comply with legal requirements. Standards-based Transport Layer Security (TLS) adequately secures data in motion at little or no cost. AWS services eligible for HIPAA ([HIPAA Eligible Services Reference](https://aws.amazon.com/compliance/hipaa-eligible-services-reference/)) must be used to store or process sensitive data in the manner recommended by AWS in a relevant whitepaper ([Architecting for HIPAA Security and Compliance on Amazon Web Services - AWS Whitepaper](https://docs.aws.amazon.com/whitepapers/latest/architecting-hipaa-security-and-compliance-on-aws/architecting-hipaa-security-and-compliance-on-aws.pdf)).
16 |
17 | Customer authorisation form processing may be handled by a 3d-party service provider ([https://www.jotform.com/hipaa/](https://www.jotform.com/hipaa/)) or developed in-house, but given development complexity caused by the variety of methods by which legally binding customer authorisation may be obtained (e.g. [How do HIPAA authorizations apply to an electronic health information exchange environment?](https://www.hhs.gov/hipaa/for-professionals/faq/554/how-do-hipaa-authorizations-apply-to-electronic-health-information/index.html) or [Is a copy, facsimile, or electronically transmitted version of a signed authorization valid under the Privacy Rule?](https://www.hhs.gov/hipaa/for-professionals/faq/475/is-a-copy-of-a-signed-authorization-valid/index.html)) certain fluidity of relevant legislation and seriousness of consequences of non-compliance with HIPAA requirements 3d-party service is the obvious choice as being faster and cheaper to implement and because it transfers the risks of non-compliance to a service provider.
--------------------------------------------------------------------------------
/adrs/ADR-7: Observability.md:
--------------------------------------------------------------------------------
1 | ## ADR-7: Observability
2 |
3 | ### Date:
4 | 2021-10-29
5 |
6 | ### Status:
7 | Proposed
8 |
9 | ### Context:
10 | Making the Farmacy Family system observable gives developers and DevOps visibility and insight into their applications, as well as context to the infrastructure, platforms, and client-side experiences those applications support and depend on. With this information they can:
11 | * Detects outages, software bugs, unauthorized activity, and service degradations.
12 | * Report on the health of the system by measuring performance and resources.
13 | * Understand how neighboring or dependent services might impact each other.
14 | * Find unknown unknowns that have never occurred in the past.
15 | * Identify long-term trends for capacity planning and business objectives.
16 |
17 | ### Decision:
18 | We propose to use the same approach for logging, tracing and monitoring as for the Farmacy Food solution designed by the ArchCollider team - [https://github.com/ldynia/archcolider/blob/master/4.ADRs/003%20Tracing%20and%20Monitoring%20Sytem.md](https://github.com/ldynia/archcolider/blob/master/4.ADRs/003%20Tracing%20and%20Monitoring%20Sytem.md)
19 |
20 | This ADR provides weighty arguments in favor of a DataDog solution vs ELK, Grafana and Amazon CloudWatch. There is no reason to change this approach. You could just connect new event sources to the Amazon Kafka Amazon Managed Streaming for Apache Kafka and set up new DataDog agents and metrics, alerts and notifications.
--------------------------------------------------------------------------------
/adrs/ADR-8: Notifications.md:
--------------------------------------------------------------------------------
1 | ## ADR-8: Notifications
2 |
3 | ### Date:
4 | 2021-10-30
5 |
6 | ### Status:
7 | Proposed
8 |
9 | ### Context:
10 | The Farmacy Family system will generate several types of notifications to users via mobile application, email, and SMS services. Notifications include new recommended posts, messages from dieticians and doctors, health recommendations, reminders and invitations during the eLearning process.
11 |
12 | ### Decision:
13 | We are supposed to use one service to handle the responsibility of generating and sending different types of notifications. The Farmacy Food system uses [Amazon Simple Notification Service](https://aws.amazon.com/sns/) for this purpose and we don’t see any reasons not to reuse it for our project.
--------------------------------------------------------------------------------
/adrs/ADR-9: Inventory Replenishment Module.md:
--------------------------------------------------------------------------------
1 | ## ADR-9: Inventory Replenishment Module
2 |
3 | ### Date:
4 | 2021-10-29
5 |
6 | ### Status:
7 | Proposed
8 |
9 | ### Context:
10 | Inventory Replenishment Module (IRM) maintains optimal SKU stock levels in fridges by taking into account predicted SKU popularity and actual sales results.
11 |
12 | Assumptions:
13 | * As per[ https://github.com/ldynia/archcolider](https://github.com/ldynia/archcolider) we are assuming that customer is using Byte Technology smart fridges capable of reporting sales and stock levels in real time.
14 | * IRM runs in the same security context as the core application and has access to its data structures (SKU data, sales transactions).
15 |
16 | ### Decision:
17 | SKU popularity can depend on a number of external criteria, which can be split into two broad groups: those depending on the fridge's location and, as fridges don't move on its own, essentially static such as geography, climate or demographics, and volatile such as weather, seasonality, purchase of other "companion" SKUs, social network activity, etc.
18 |
19 | To provide for this type of analysis IRM utilises a set of rules defining correlations between various SKU attributes and external criteria, uses these rules to determine SKU affinity to certain conditions and calculates optimal stock levels for each SKU. It then calculates the quantity of each SKU required to replace sold and expired products, provide for pick-up orders and bring stock levels in the fridge to optimal levels, and creates a delivery van load request. It should be noted that there is no requirement for delivery routing and optimisation, this development should be recommended to a customer. Installation of a new fridge or relocation of existing one interpolates rules from nearby fridges for a new location and lets user adjust them if necessary.
20 |
21 | But the most important criterion is the actual sales and write-off figures. IRM will use Amazon Forecast AI service to analyse past sales data of each fridge, correlate it with external criteria and predict sales.
22 |
23 | In an established business AI model could've been trained on existing sales data, but in start-up company this data is not available, so we follow a safe adaptive approach by starting with a reasonable set of static rules and let the AI take over when ready fridge by fridge: IRM monitors accuracy of both models and uses the one, which made statistically better predictions over the past period. As static rules are used for a relatively short transitional period while AI model is being trained, no effort is made to automate the creation and maintenance of these rules as trade-off for solution cost.
24 |
25 | Note that Amazon Forecast has a built-in weather data provider, so weather data is not required.
26 |
27 | 
28 |
29 |
30 | We recommend the same approach for Analysis of Service Level Module and eDietician module.
31 |
--------------------------------------------------------------------------------
/docs/farmacy_family_arch_kata.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vadagama/sever_crew/bddd9065faa472d687008ab48b7b21cd14827bf5/docs/farmacy_family_arch_kata.pdf
--------------------------------------------------------------------------------
/images/Silver-medal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vadagama/sever_crew/bddd9065faa472d687008ab48b7b21cd14827bf5/images/Silver-medal.png
--------------------------------------------------------------------------------
/images/architecture_style.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vadagama/sever_crew/bddd9065faa472d687008ab48b7b21cd14827bf5/images/architecture_style.jpg
--------------------------------------------------------------------------------
/images/aws-auto-scaling.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vadagama/sever_crew/bddd9065faa472d687008ab48b7b21cd14827bf5/images/aws-auto-scaling.png
--------------------------------------------------------------------------------
/images/baseline_architecture_container.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vadagama/sever_crew/bddd9065faa472d687008ab48b7b21cd14827bf5/images/baseline_architecture_container.jpg
--------------------------------------------------------------------------------
/images/baseline_architecture_context.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vadagama/sever_crew/bddd9065faa472d687008ab48b7b21cd14827bf5/images/baseline_architecture_context.jpg
--------------------------------------------------------------------------------
/images/data.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vadagama/sever_crew/bddd9065faa472d687008ab48b7b21cd14827bf5/images/data.png
--------------------------------------------------------------------------------
/images/data_ext.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vadagama/sever_crew/bddd9065faa472d687008ab48b7b21cd14827bf5/images/data_ext.png
--------------------------------------------------------------------------------
/images/deployment.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vadagama/sever_crew/bddd9065faa472d687008ab48b7b21cd14827bf5/images/deployment.png
--------------------------------------------------------------------------------
/images/desktop_1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vadagama/sever_crew/bddd9065faa472d687008ab48b7b21cd14827bf5/images/desktop_1.png
--------------------------------------------------------------------------------
/images/desktop_2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vadagama/sever_crew/bddd9065faa472d687008ab48b7b21cd14827bf5/images/desktop_2.png
--------------------------------------------------------------------------------
/images/desktop_3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vadagama/sever_crew/bddd9065faa472d687008ab48b7b21cd14827bf5/images/desktop_3.png
--------------------------------------------------------------------------------
/images/desktop_4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vadagama/sever_crew/bddd9065faa472d687008ab48b7b21cd14827bf5/images/desktop_4.png
--------------------------------------------------------------------------------
/images/edietician.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vadagama/sever_crew/bddd9065faa472d687008ab48b7b21cd14827bf5/images/edietician.jpg
--------------------------------------------------------------------------------
/images/inventory_replenishment_module.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vadagama/sever_crew/bddd9065faa472d687008ab48b7b21cd14827bf5/images/inventory_replenishment_module.jpg
--------------------------------------------------------------------------------
/images/marketing_view.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vadagama/sever_crew/bddd9065faa472d687008ab48b7b21cd14827bf5/images/marketing_view.jpg
--------------------------------------------------------------------------------
/images/medal.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vadagama/sever_crew/bddd9065faa472d687008ab48b7b21cd14827bf5/images/medal.png
--------------------------------------------------------------------------------
/images/mobile_1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vadagama/sever_crew/bddd9065faa472d687008ab48b7b21cd14827bf5/images/mobile_1.png
--------------------------------------------------------------------------------
/images/mobile_2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vadagama/sever_crew/bddd9065faa472d687008ab48b7b21cd14827bf5/images/mobile_2.png
--------------------------------------------------------------------------------
/images/mobile_3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vadagama/sever_crew/bddd9065faa472d687008ab48b7b21cd14827bf5/images/mobile_3.png
--------------------------------------------------------------------------------
/images/mobile_4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vadagama/sever_crew/bddd9065faa472d687008ab48b7b21cd14827bf5/images/mobile_4.png
--------------------------------------------------------------------------------
/images/mobile_6.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vadagama/sever_crew/bddd9065faa472d687008ab48b7b21cd14827bf5/images/mobile_6.png
--------------------------------------------------------------------------------
/images/mobile_7.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vadagama/sever_crew/bddd9065faa472d687008ab48b7b21cd14827bf5/images/mobile_7.png
--------------------------------------------------------------------------------
/images/mobile_8.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vadagama/sever_crew/bddd9065faa472d687008ab48b7b21cd14827bf5/images/mobile_8.png
--------------------------------------------------------------------------------
/images/mobile_9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vadagama/sever_crew/bddd9065faa472d687008ab48b7b21cd14827bf5/images/mobile_9.png
--------------------------------------------------------------------------------
/images/quality_attributes.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vadagama/sever_crew/bddd9065faa472d687008ab48b7b21cd14827bf5/images/quality_attributes.jpg
--------------------------------------------------------------------------------
/images/target_architecture_containers.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vadagama/sever_crew/bddd9065faa472d687008ab48b7b21cd14827bf5/images/target_architecture_containers.jpg
--------------------------------------------------------------------------------
/images/target_architecture_context.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/vadagama/sever_crew/bddd9065faa472d687008ab48b7b21cd14827bf5/images/target_architecture_context.jpg
--------------------------------------------------------------------------------
/pages/Infrastructure_register.md:
--------------------------------------------------------------------------------
1 | #### Infrastructure register
2 |
3 | The table below provides a list of infrastructure elements that are required for the implementation of the project.
4 |
5 |
6 |
7 |
8 | Name of service
9 | |
10 | Provider
11 | |
12 | Description
13 | |
14 |
15 |
16 | Application Load Balancer
17 | |
18 | AWS
19 | |
20 | AWS Network Firewall is a managed service that makes it easy to deploy essential network protections for all of your Amazon Virtual Private Clouds (VPCs)
21 | |
22 |
23 |
24 | Route 53
25 | |
26 | AWS
27 | |
28 | Amazon Route 53 is a scalable and highly available Domain Name System (DNS) service
29 | |
30 |
31 |
32 | Transit Gateway
33 | |
34 | AWS
35 | |
36 | Amazon Transit Gateway connect Amazon VPCs, AWS accounts, and on-premises networks to a single gateway
37 | |
38 |
39 |
40 | EC2
41 | |
42 | AWS
43 | |
44 | Amazon EC2 provides Secure and resizable compute capacity to support virtually any workload
45 | |
46 |
47 |
48 | Cognito
49 | |
50 | AWS
51 | |
52 | Amazon Cognito provides Simple and Secure User Sign-Up, Sign-In, and Access Control
53 | |
54 |
55 |
56 | S3
57 | |
58 | AWS
59 | |
60 | Amazon S3 - Object storage built to retrieve any amount of data from anywhere
61 | |
62 |
63 |
64 | API Gateway
65 | |
66 | AWS
67 | |
68 | Amazon Api Gateway for create, maintain, and secure APIs at any scale
69 | |
70 |
71 |
72 | CloudFront
73 | |
74 | AWS
75 | |
76 | Amazon CloudFront securely deliver content with low latency and high transfer speeds
77 | |
78 |
79 |
80 | SNS
81 | |
82 | AWS
83 | |
84 | Amazon SNS for Fully managed pub/sub messaging, SMS, email, and mobile push notifications
85 | |
86 |
87 |
88 | MSK
89 | |
90 | AWS
91 | |
92 | Securely stream data with a fully managed, highly available Apache Kafka service
93 | |
94 |
95 |
96 | DynamoDB
97 | |
98 | AWS
99 | |
100 | Amazon DynamoDB - fast, flexible NoSQL database service for single-digit millisecond performance at any scale
101 | |
102 |
103 |
104 | RDS
105 | |
106 | AWS
107 | |
108 | Amazon RDS - Set up, operate, and scale a relational database in the cloud with just a few clicks
109 | |
110 |
111 |
112 | Glue
113 | |
114 | AWS
115 | |
116 | Amazon Glue - is a fully-managed, pay-as-you-go, extract, transform, and load (ETL) service that automates the time-consuming steps of data preparation for analytics.
117 | |
118 |
119 |
120 | Athena
121 | |
122 | AWS
123 | |
124 | Amazon Athena - Amazon Athena is an interactive query service that makes it easy to analyze data in Amazon S3 using standard SQL. Athena is serverless, so there is no infrastructure to manage, and you pay only for the queries that you run.
125 | |
126 |
127 |
128 | Lambda
129 | |
130 | AWS
131 | |
132 | Amazon Lambda for run code without thinking about servers or clusters
133 | |
134 |
135 |
136 | Forecast
137 | |
138 | AWS
139 | |
140 | Forecast business outcomes easily and accurately using machine learning
141 | |
142 |
143 |
144 | DataDog
145 | |
146 | DataDog
147 | |
148 | Datadog is an observability service for cloud-scale applications, providing monitoring of servers, databases, tools, and services, through a SaaS-based data analytics platform
149 | |
150 |
151 |
152 | CloudFormation
153 | |
154 | AWS
155 | |
156 | Amazon CloudFormation helps speed up cloud provisioning with infrastructure as code
157 | |
158 |
159 |
160 |
161 |
162 | We checked the recommended services by HIPAA Eligible Services Reference and all the listed below services are [https://aws.amazon.com/compliance/hipaa-eligible-services-reference/?nc1=h_ls](https://aws.amazon.com/compliance/hipaa-eligible-services-reference/?nc1=h_ls)
163 |
164 | Datadog HIPAA certified as well: [https://www.datadoghq.com/blog/hipaa-compliant-log-management/](https://www.datadoghq.com/blog/hipaa-compliant-log-management/)
165 |
--------------------------------------------------------------------------------
/pages/data.md:
--------------------------------------------------------------------------------
1 | ## eDietitan data flow model
2 |
3 | We also to estimate the volumes of based on the metrics below:
4 | * 30-50 groups per month
5 | * 20-40 posts per month per user
6 | * 80-100 chat messages per users per day
7 | * 5-10 webinars per month per user
8 |
9 | Determining the size for each stored unit of information:
10 | 
11 |
12 | Measurement of all data volumes for a month and for a year:
13 | 
14 |
15 | Link for a source file: [data.xlsx](https://docs.google.com/spreadsheets/d/1LtAQ2aVauiaGhDp_cCrl90_P26rn7ZcAbmdrNTh4zrM/edit?usp=sharing)
--------------------------------------------------------------------------------
/pages/edietician.md:
--------------------------------------------------------------------------------
1 | ## eDietitan data flow model
2 |
3 | ### Description
4 | Customer maintains his/hers profile and dietary requirements via web or mobile UI and participates in interactive community provided by Social Network Module. Profile, community activity and Farmacy Foods order history (NB: Farmacy Foods account is optional) are analysed by eDietitian Module, which identifies community groups with shared interests or locations and recommends them to customers via Community Engine. It also generates Dietary and Medical Service recommendations and exchanges data with 3d party medical service providers via 3d-party API; results are communicated to customers in a more personal manner via eDietitian bot.
5 |
6 | ### Data security
7 | Dietary data handling procedures should comply with HIPAA requirements: data should be encrypted both when stored and in transit (TLS). In addition, medical data release to 3d parties should be authorised by a patient, authorisation process is handled by an external service provider (jotform.com). Each data item stored in a customer's profile can be made public or private; data release is handled by Access Guard processes.
8 |
9 | 
--------------------------------------------------------------------------------
/pages/multizone_approach.md:
--------------------------------------------------------------------------------
1 | #### Multi-zone approach
2 | The Multi-zone approach will be used to allow redundancy of critical data and high availability on the next step of the project.
3 |
4 | This is a generalized scheme of a multi-zone solution.
5 |
6 | 
--------------------------------------------------------------------------------
/pages/question_and_answers.md:
--------------------------------------------------------------------------------
1 | ## Additional information based on Q&As
2 |
3 | We have got some additional information during our Question and Answer session with the Product Owner:
4 |
5 | * **Are there any cost limitations?** - Farmacy Food is a startup so we can assume infinite funding here, but no particular cost. Assume that there is no unlimited money
6 |
7 | * **Can the medical data be attracted to the hackers?** - One thing is to create a threat profile. It's medical data.
8 |
9 | * **Do we cover data center aspects as well?** - Yes, that is a set of concerns, because we have only transactional data in Farmacy Food and should think about analytical data in the new Farmacy Family architecture.
10 |
11 | * **What about client UI?** - the only thing that we need to know, that Farmacy Food is a reactive application. We need to integrate with the reactive UI. Farmacy Food supports both mobile and web applications. You feel free to choose the solution.
12 |
13 | * **Is the system global or country specific?** - you can safely keep this in the USA for now.
14 |
15 | * **Are there any requirements for technologie stack?** - it's up to you as an architect.
16 |
17 | * **Tell about the time for development** - you could offer your vision of evolution and roadmap and development process.
18 |
19 | * **Are there any specific security issues? Are there any requirements for authentication, authorisation or cryptographic?** - Yes, medical data. Integration with clinics should be based only on permissions of customer allow.
20 |
21 | * **Do we need to worry about CDN to have static content delivered sooner?** - It's not about requirements
22 |
23 | * **What is the IT department of the pharmacy foods?** - It’s a startup
24 |
25 | * **There are existing platforms that solve discussions/content/media staff well. Does FFo have a preference for build vs use existing solutions on that front? And why?** - We can't wait for your proposal. If you could find a solution with enough capabilities and integration points, it would be great.
26 |
27 | * **Do we work with the assumption that pharmacy food is implemented on aws cloud? Do we have onprem resources?** - Farmacy Food is actually on AWS stack but noticed that we have new requirements here. Maybe we require something onprem for analytical data.
28 |
29 | * **Do the diagrams need to be UML compliant or anything else could be correct?** - No need to be UML. Don't use tools that need downloading and installation processes for review.
30 |
31 | * **Although users are primarily based out of the USA, is it expected that users with different languages are using the application?** - Multilingual or not - it's your decision.
32 |
33 | * **Any particular format of ADRs of supporting documents that we should follow?** - No. Its free for you.
34 |
35 | * **Do we have to integrate with pharmacy food identity?** - Farmacy Food and FFa should be integrated in case of sharing customer information. Interesting integration point.
36 |
37 | * **Do we consider only web-based app or do we receive bonus points for mobile and flexibility on other devices/media?** - Existing Farmacy Food apps include web and mobile apps. The only requirement is to integrate your solution with Farmacy Food reactive applications
38 |
39 | * **Could we advise some changes to the Farmacy Food solution?** - Yes if the Farmacy Family requires any modifications during integration, you could advise solutions. If you need customization of any service or interface of Farmacy Food you could do it.
40 |
41 | * **How mature are the data science skills at Farmacy Food?** - We don’t have any employers with such skills, but they have access to that kind of expertise. That should not be an architectural restriction.
42 |
43 | * **For integration with 3rd party systems can we assume any protocol such as REST or any other specific requirement?** - No specific requirements
44 |
45 | * **Users based on Farmacy Food are across which geographies to incorporate latency aspect?** - all USA, not multinational. Farmacy Food is located in Michigan. Don’t need to build a new Facebook, we need strict clusterization of users by geographic areas.
46 |
47 | * **Do we have initial figures around the number of users existing in Farmacy food? And growth rate?** - The number of users is hundreds, not thousands. We prognose not explosive growth.
48 |
49 | * **How many transactional user bases do they have in a day?** - hundreds a day
50 |
51 | * **Is there any information about Farmacy Foods team technical expertise?** - Modern software development team, cloud, microservices, AWS, nothing exotic
52 |
53 | * **Do we also consider iac and infrastructure automation, CI/CD etc?** - Not necessary, but you can consider the fitness function and specify it. And this could affect the CI/CD pipeline. That's not a core part of competition.
54 |
55 | * **Do we have plans to deal with large objects (BLOBs like video, sound ets)?** - that should be a part of your architectural solution
56 |
57 | * **Are farmacy food customers subscriptions based? Like monthly, yearly etc Would that change for farmacy family?** - Not now. I could be a real benefit of Farmacy Family
58 |
59 | * **Is an engaged member == engaged customer? Can anyone join the community?** - Don't need to purchase something in Farmacy Food to be a part of the Farmacy Family. You can go directly to the Farmacy Family.
60 |
61 | * **What is the organisational structure for Farmacy Food?** - It's a startup. The structure is informal.
62 |
63 | * **If anyone can join the Farmacy Family does that mean that there is not always an identity from Farmacy Food that can be referenced in the Farmacy Family?** - Yes
--------------------------------------------------------------------------------
/pages/subdomains.md:
--------------------------------------------------------------------------------
1 | ## Classification of activities in DDD
2 | Identified functional areas can be prioritized using a Domain Driven Design approach in order to have a good understanding of priorities and assumptions for various subdomains.
3 |
4 | ### General domain
5 | We could describe two main areas of activity:
6 | * Farmacy Food - producing and selling healthy food
7 | * Farmacy Family - engagement transactional customers
8 |
9 | ### Core subdomain
10 | In core subdomain of Farmacy Family domain we identified:
11 | * Engagement
12 | * Customer facing mobile and web applications
13 | * Rich user profile
14 | * Data analysis and recommendations:
15 | * eDietician
16 | * Inventory Replenishment
17 | * Users Engagement Analysis
18 |
19 | For core subdomain its better to be implemented in-house by our developer team because this area allows us to achieve an advantage over our competitors.
20 |
21 | ### Generic subdomain
22 | In generic subdomain we identified:
23 | * Social network capabilities
24 | * Webinars
25 |
26 | These are the types of activities that all companies perform in the same way. We could buy the best solution on the market to close our requirements.
27 |
28 |
29 | ### Supporting subdomain
30 | In supporting subdomain we identified:
31 | * Authintication and authorisation
32 | * Reporting
33 | * Notification
34 | * Tracing and Monitoring
35 | * Integration with Farmacy Food system
36 | * Integrations with 3rd party clinics
37 |
38 | These activities just support the company’s business but do not provide any competitive advantage. Could be outsorced or implemented inhouse.
39 |
--------------------------------------------------------------------------------
/pages/ui.md:
--------------------------------------------------------------------------------
1 | ## UI Prototypes
2 |
3 | During research process we investigated how it might look like and develop several UI prototypes of web and mobile client applications.
4 |
5 | ### Social Network UI
6 |
7 | ##### Dashboard
8 | 
9 |
10 | ##### Post new message
11 | 
12 |
13 | ##### Settings
14 | 
15 |
16 | ### iOS client UI
17 |
18 | ##### Patient profile with data
19 |
20 |
21 | ##### Patient's medical data
22 |
23 |
24 | ##### Groups
25 |
26 |
27 | ##### Online consultation with a doctor
28 |
29 |
30 | ##### Messages and chats
31 |
32 |
33 | ##### Group Page
34 |
35 |
36 | ##### Goal statistics
37 |
38 |
--------------------------------------------------------------------------------