Application Development Requirements & Landscape
Functional Requirements
-
Local Authentication:
- Implement local authentication using email and password.
- Features include:
- Hashed passwords
- Email verification
- Forgot password functionality
- Ability to block users if necessary
-
Multiple Roles (Role-Based Access Control):
- Admin: Can manage everything, including sales data.
- Manager: Can view sales data, inventory, and products, but cannot create anything.
- Delivery Person: Can manage queue orders and update their status.
- User: Can view products, read reviews, and place orders, but cannot access admin information.
- Other Role: [Include specific role details if applicable]
-
Order Management: (common example)
- Users can place orders.
- Users can view existing reviews and only post a review after a successful order.
- Sales dashboard
- Manage inventory
- Live tracking of the order
-
Sales Dashboard:
- A dashboard to view sales data.
-
Inventory Management:
- Manage product inventory.
-
Live Tracking of Orders:
- Users can track the status of their orders in real-time.
Non-Functional Requirements:
- Secure: The system must ensure data protection.
- Reliable: The system must function correctly under expected conditions.
- Easy Maintainability: The system should be easy to update and maintain.
- Awesome Usability: The system should provide a great user experience.
- High Availability: Not a primary concern for the MVP.
- Scalability: Not a primary concern for the MVP.
Choose Necessary Technology
Requirements: (SRS - Software Requirement Specification)
Requirement Analysis & Design
System Design
- Architectural Decisions:
- Monolithic (Easy to develop, but very complex to maintain when application grows)
- Microservice (Very hard to develop, but easy to maintain)
- Serverless (FAAS - Function as a Service)
Select Database:
- SQL: (When I know exactly what properties the data will have and they won't change frequently)
- NoSQL: (When requirements might change randomly)
- Key-Value: (For caching, job scheduling, message brokering)
- Graph Database: (For handling data in a graph structure)
- Search Database: (For search engine-related tasks)
- Elastic Search (opens in a new tab) (Open-source, Full Text Search)
- Algolia Search (opens in a new tab) (Open AI 3 - Natural Language Processing)
Software Architecture
Software Architecture is directly related to coding. It entirely depends on system design. To understand software architecture, we need to know the following:
- Object-Oriented Programming (OOP)
- OOP Design Patterns & Principles
- Data Structures & Algorithms (DSA)
- Clean Code Architecture
- Problem Solving
Testing
- Test Driven Development (TDD) - (Write the test code first, then write the main code)
- End-to-End (E2E) Testing - (Testing the application using a headless browser to simulate real user interactions across the entire system)
Distribution
-
DevOps:
- Continuous Integration (CI):
- Git (opens in a new tab) & GitHub (opens in a new tab)
- Linux (opens in a new tab), SSH - Secure Shell (opens in a new tab)
- CircleCI (opens in a new tab), Travis CI (opens in a new tab), Jenkins (opens in a new tab)
- Docker (opens in a new tab), Docker Compose (opens in a new tab)
- Docker Swarm (opens in a new tab), Kubernetes (opens in a new tab)
- Prometheus (opens in a new tab), Nagios (opens in a new tab)
- Ansible (opens in a new tab)
- Continuous Integration (CI):
-
Cloud Engineering:
- VPC (Virtual Private Cloud) (opens in a new tab)
- EC2 (Elastic Compute Cloud) (opens in a new tab)
- S3 (Simple Storage Service) (opens in a new tab)
- RDS (Relational Database Service) (opens in a new tab)
- DynamoDB (opens in a new tab)
- Route 53 (opens in a new tab)
- CloudFront (CDN) (opens in a new tab)
- SES (Simple Email Service) (opens in a new tab)
- SNS (Simple Notification Service) (opens in a new tab)
- SQS (Simple Queue Service) (opens in a new tab)
- API Gateway (opens in a new tab)
- Lambda (opens in a new tab)
- Step Functions (opens in a new tab)
- CloudWatch (opens in a new tab)
- CloudFormation (opens in a new tab), Terraform (opens in a new tab), CDK (opens in a new tab)
Development Steps:
- Requirements
- Design
- Implementation:
- UI/UX Design
- Web Design
- Frontend Development
- Backend Development
- Test Code
- Testing, Deployment
- Maintenance