Backend Developer Assignment
Backend Developer Assignment
Objective:
Develop a secure, scalable, full-stack application that allows users to upload, store, and interact
with any type of documents ( pdf, ppt, csv etc. ) through advanced natural language processing
(NLP) and implement a RAG Agent to do the querying for any question the user has. The
application should support document management, user authentication, and efficient RAG
agents, and utilize unstructured.io for efficient parsing of document content.
Functional Requirements:
LLD Design:
● DB Schema
○ Tables structure
○ Foreign Keys
○ Normalization of data
● Classes
● Functions
● Attributes of a class
● Interaction between two or more classes.
● OPEN-CLOSE Relationships
● Handling of Dependencies
Non-Functional Requirements:
● Usability: User friendly UI/UX.
● Performance: Scalable and efficient NLP processing.
● Security: Secure data handling and user authentication.
● Scalability and Reliability: Design for scalability, high availability, and fault tolerance.
Deployment Specification:
● Containerization: Dockerize the frontend, backend, and any other microservice. Provide
Dockerfiles and instructions for building images.
● Kubernetes Deployment(Optional): Create Kubernetes manifests or Helm charts for
deploying the application components on a Kubernetes cluster. Include instructions for
setting up the deployment on a local Kubernetes cluster (e.g., minikube) or a
cloud-based Kubernetes service (e.g., AWS EKS, Google GKE).
Monitoring (Optional):
● Monitoring: Set up Prometheus for collecting metrics and Grafana for dashboard
visualization. Include Kubernetes manifests or configuration for deploying these tools
alongside the application. Ensure that key metrics from the application, database, and
any middleware are being monitored.
● Logging: Configure the application to emit logs in a structured format. Set up the ELK
Stack for log aggregation and visualization. Include setup instructions or configuration as
part of the deployment process.
Assignment Deliverables:
● Source Code: Well-commented source code, following best practices.
● Documentation: README with setup instructions, API documentation, architecture
diagrams, and deployment guide.
● Demo: A live demo or screencast showcasing application functionality and deployment
steps.
● Low Level Design Diagram
Evaluation Criteria:
● System Design: Scalable, secure, and maintainable architecture.
● Code Quality: Clean and efficient code.
● Deployment Proficiency: Successful containerization and deployment on Kubernetes
with monitoring and logging.
● Innovation: Novel features or technologies enhancing application value.
● Easy to add features without modifying existing code.
Additional Requirements:
● Document Parsing: Demonstrate the integration and use of unstructured.io for advanced
parsing capabilities, handling a variety of document formats beyond PDFs.
● Deployment: Detailed steps for deploying the application in a containerized environment
using Kubernetes, including scaling, monitoring, and logging setup.