Final Project Guidelines
EE 547: Applied and Cloud Computing for Electrical Engineers
See project deliverables for submission requirements and deadlines.
Overview
The final project requires teams of three students to design and implement a complete cloud application that integrates multiple independent components. Your application must demonstrate understanding of system architecture, asynchronous processing, data persistence, and deployment practices covered throughout the course.
Teams will propose, implement, and deploy a working system to AWS, presenting both the technical architecture and a live demonstration.
Technical Requirements
Your application must integrate the following components:
- Multiple Independent Services
- Design at least two asynchronous components that communicate through defined interfaces. These might be API services, batch processors, event handlers, or background workers. Components should operate independently and coordinate through APIs, message queues, or event streams.
- REST API
- Implement an HTTP API that exposes application state and services. Your API must handle authentication, use proper HTTP semantics (methods, status codes, error handling), and support concurrent requests.
- Data Persistence
- Use at least one database or storage system appropriate to your data model. This might be relational (PostgreSQL, MySQL), document (DynamoDB), key-value, or object storage (S3). Your choice should reflect understanding of trade-offs between different storage patterns.
- Asynchronous Processing
- Include at least one component that processes tasks asynchronously. This might be batch jobs, webhook handlers, queue-based workers, or streaming pipelines. The goal is demonstrating decoupled architectures where components don’t block waiting for operations to complete.
- Machine Learning Component
- Incorporate a machine learning model or algorithm as part of your application logic. This could be classification, regression, clustering, embedding generation, similarity search, recommendation, or another ML technique. The ML component should serve your application’s purpose—it’s one tool among several, not the entire focus.
- User Interface
- Provide a frontend for interacting with your system. This might be a web interface, a command-line tool with rich interaction, or an API client demonstrating your system’s capabilities. The interface must show user-specific content and handle authentication.
Deployment Requirements
- AWS Infrastructure
- Deploy your application to AWS. Use EC2 instances, container services (ECS), serverless functions (Lambda), managed databases (RDS, DynamoDB), object storage (S3), or other AWS services as appropriate. Provision resources through manual configuration, CLI scripts, or infrastructure-as-code tools.
- Python as Primary Language
- Implement core application logic in Python. You may use other languages for specific components where justified (frontend JavaScript frameworks, performance-critical code), but Python should dominate your backend implementation.
- Version Control
-
Maintain your project in a private GitHub repository. Grant read access to
github-share-usceceby the draft proposal deadline. Your repository should show regular commits from all team members throughout the development period.
Project Scope
Your project should demonstrate integration of multiple course concepts without attempting production-scale systems. A well-designed application with three solid components working together is far better than an overly ambitious architecture with incomplete implementations.
What Your Project Is Not
- Not a web development showcase
- The frontend exists to demonstrate your system’s functionality, not to showcase UI/UX skills.
- Not ML infrastructure
- Do not build model registries, feature stores, training orchestration platforms, or MLOps tooling. These are infrastructure projects, not applications.
- Not a homework extension
- Simply scaling up the ArXiv assignments (bigger database, more embeddings, fancier queries) is insufficient. You’ve already implemented those components individually.
- Not a simple CRUD application
- Database-backed forms with create/read/update/delete operations do not demonstrate the architectural concepts this course emphasizes.
What Your Project Is
- A complete system solving a problem
- Your application should address a real need or provide useful functionality. Users should be able to accomplish something meaningful with your system.
- An integration of independent components
- The value comes from how components work together, not from any single component. Well-defined interfaces and asynchronous coordination demonstrate architectural understanding.
- A demonstration of technical decisions
- Your project should show you understand trade-offs. Why did you choose PostgreSQL over DynamoDB? Why process tasks asynchronously instead of synchronously? Why use this ML technique instead of alternatives?
- A working deployment
- Your system must actually run on AWS and be accessible for evaluation. Partially working code or “it works on my laptop” is insufficient.
Choosing a Project
Select a problem domain that interests your team and allows integration of multiple technologies. Strong projects often come from research areas, personal interests, or practical problems you’ve encountered.
Several patterns work well for this course:
- Data Processing Applications
- Systems that collect data from external sources (APIs, webhooks, public datasets), process or transform it (possibly using ML), and provide access through an API or interface. These typically involve periodic data collection, processing pipelines, storage, and serving results.
- Event-Driven Systems
- Applications that respond to external events by evaluating conditions and executing tasks asynchronously. For example, monitoring external services for specific conditions, then triggering analysis or notification workflows.
- Real-Time Analysis Systems
- Applications that process streaming data or frequent updates, maintain state, and provide current information. These integrate data ingestion, processing, persistence, and presentation layers.
- Content Organization and Discovery
- Systems that collect, index, or organize information (documents, papers, media, structured data) and provide search, recommendation, or discovery capabilities enhanced by ML techniques.
The key is finding a domain where you can naturally integrate asynchronous processing, data persistence, ML, and APIs without forcing components together artificially.
Thinking About Scope
Consider what you built in homework assignments. In HW1, you fetched ArXiv papers and built a multi-container processing pipeline. In HW2, you created an HTTP API server and trained text embeddings. In HW3, you designed database schemas and implemented complex queries.
Your project should feel like integrating all three assignments, but in a new domain and with additional complexity. If your entire project could have been a homework problem, the scope is too small. If you need more than three core components operating independently, you’re probably overcommitted.
Technical Integration
The strength of your project comes from how components work together.
- Well-Defined Interfaces
- Components should communicate through clean interfaces—REST APIs, message queues, shared storage with clear contracts. Avoid tight coupling where one component knows implementation details of another.
- Appropriate Asynchrony
- Use asynchronous processing where operations are slow, unpredictable, or can fail. Fetching external data, running ML inference on large inputs, processing batches—these belong in background workers, not in API request handlers.
- Data Flow
- Think carefully about how data moves through your system. Where is it collected? Where is it processed? Where is it stored? How do users access it? Clear data flow indicates clear architecture.
- Error Handling
- Components should handle failures gracefully. What happens when an external API is unavailable? What happens when ML inference fails? What happens when the database connection drops? You don’t need production-grade reliability, but you should think about failure modes.
Machine Learning Integration
Your ML component should be part of the application, not a research exercise.
You might use ML to: - Classify or categorize inputs (documents, images, time series) - Generate embeddings for similarity search or recommendation - Predict outcomes or detect anomalies - Extract information or features from unstructured data - Rank or score items for presentation
The ML model doesn’t need to be novel or state-of-the-art. Using logistic regression, k-means clustering, or a simple neural network is fine if it serves your application’s purpose. Training a small model on domain-specific data is better than deploying a pre-trained model you don’t understand.
What matters is integration: how does the ML component fit into your architecture? Is inference synchronous or asynchronous? Where do you store models? How do you handle inference failures? These questions demonstrate understanding of ML in production systems.
Evaluation Criteria
Projects will be evaluated on technical integration, implementation quality, appropriate scope, and successful deployment.
- Technical Integration
- Does your system integrate multiple independent components through well-defined interfaces? Does the architecture demonstrate understanding of distributed systems concepts? Are asynchronous components truly decoupled?
- Implementation Quality
- Is your code well-structured and maintainable? Do components handle errors appropriately? Does the system work reliably under normal conditions? Have you made reasonable technical choices given project constraints?
- Scope and Ambition
- Does your project demonstrate appropriate complexity for a team of three over five weeks? Have you tackled interesting technical challenges? Does the system go beyond trivial integration of existing tools?
- Deployment and Operations
- Is your system successfully deployed to AWS? Can it be accessed and evaluated? Is the deployment architecture documented?
Evaluation emphasizes conceptual understanding and architectural decisions over production-ready optimization. Proper HTTP status code usage matters more than sub-100ms response times. Correct database schema design matters more than query optimization. Successful deployment matters more than auto-scaling configuration.
Academic Integrity
All code must be written by your team. You may use standard libraries, frameworks, and cloud SDKs. You may reference documentation and troubleshoot with AI assistance. You may not copy substantial code from other projects or submit AI-generated work without understanding.