December 13th, 2017
- Update the README description for the codebase.
October 29th, 2017
- Released the initial version of this spec 🎉.
The goal of the final project is for all of you to build some kind of meaningful project that proves your AWS skillset to employers.
It should also help you develop experience planning the architecture of a cloud system, and interconnecting different AWS services to build a project in a scalable fashion.
This project is meant to be extremely open-ended. There are really just two requirements:
- You must use at least three AWS services.
- At least one of those services must have not been covered in class.
Some AWS services are not going to be eligible to be counted towards the above requirement. These services are either required for almost any project, or are not going to be substantive in their implementation. For now, this list includes:
Keep in mind that I reserve the right to update this list between now and the proposal demos. I'll announce any changes to this list on Piazza.
The list of services that will be considered "covered" in class are:
- API Gateway
- Elasticsearch Service
- CloudFormation (and Terraform)
Here are the major deadlines that you should keep in mind:
|Codebase||12/15||45% (15% / service)|
|In-person Demo||by 12/19||10%|
The remaining 20% will be awarded based on the creativity of the project.
You can get an extra 2% per service that you use, up to 10% extra credit. You can also get up to an extra 5% for load testing your app (f.e. with Bees with Machine Guns) and including this in your video demo.
All deliverables are due by 11:59:59PM on the above due date.
Your proposal will be structured as a slide deck. It should touch on at least the following topics:
- What do you want to build?
- How will it work from a user's perspective?
- What services will you use to build it and how will those services work together?
- How will your service scale?
- If you need hardware, what do you need and how will you get it?
- If you need a data set, where will you get it?
See this slide deck for an example of what a proposal may look like.
Submit a PDF version of your proposal slides (or website link, if hosted online) as a follow-up discussion post to this Piazza post.
To create an architecture diagram, I would recommend either Draw.io or Cloudcraft.
There is a sign-up sheet here to sign up for a time slot to present your proposal to Andrej and me. You'll have up to 5 minutes to run through your presentation, then the remaining 10 minutes will be for questions and feedback. Presentations will happen in the Sandbox makerspace (CSIC 3107).
At roughly the halfway point, you will need to submit a write-up of your progress so far. Be sure to include:
- An overview of the progress you have made so far.
- The remaining work to be completed.
- Any changes you have made to your project since you submitted the proposal slides, including any feedback received that you plan to incorporate.
- Problems that you have encountered so far and how you have addressed them.
To give you some context on the amount of detail I expect, it should be at least a half-page single-spaced. However, include as much detail as you need!
Submit the checkpoint as a PDF over email to [email protected].
This project is meant to be released publicly so that employers can look over what you have built. Therefore, you will need to upload all work to a public GitHub repository. There will be a Piazza post in December where you can submit the link to your GitHub repo.
You will also need to include a README file with your GitHub repo. It should contain an overview of the project, links to your public YouTube video, your architecture diagram, an overview of your API (if you have one), and the "cmsc389l" tag.
Your repo should contain everything that someone would need to recreate your application. If there are settings you had to configure in the Management Console or elsewhere, add some high-level notes of those steps in your README. For example, if you had write your own IAM policies, or configure the Skills Kit then you should include those JSON files in your repo.
You will need to record a video demo of your application (at least 2-3 minutes).
Make sure your demo:
- Includes a high-level overview of your project
- Shows your application in action
- Walks through your application architecture diagram
- Briefly discusses how you handled scalability concerns
- A description of the hardest problem you encountered and your solution
To record parts of your demo, you can use the free Google Chrome extension, Loom. There are a number of simple video editing tools out there, such as iMovie, that you can use to splice together clips to form your demo. (Have a recommendation for editing software? Post it on Piazza!)
I encourage you to make this video as professional as reasonably possible! After all, employers will see this.
You will need to give an in-person demo of your project to the course facilitators. The sign-up sheet is available here: https://doodle.com/poll/bmn5fxn6ntt66cq7 You are also welcome to give you demo earlier, if that works better.
We'll try to ask the kind of questions that we would expect employers to ask, if you were to show them your project.
Example Project: Alexa Chess App
Other Project Ideas
There are a lot of really interesting services that you can use to build fun projects! Here are some more high-level ideas:
- AWS IoT: Build something cool with sensor data! Check out the Programmable IoT Dash Buttons. Or walk in to the Sandbox and chat with any of the managers about the hardware available to you.
- AWS Lex: Build a chat-based assistant on Slack/Messenger/etc. (Brownie points if you make a sassy one, like Poncho: article)
- Big Data: Process Twitter data in real-time with the Kinesis Streams, or build an AWS MapReduce job to create a data visualization off of a Wikipedia data dump
- AWS GameLift: Build a multiplayer game and host it in the cloud!
That only scratches the surface of the number of ideas you could run with. Here a picture of all of the services currently available on AWS!
I have an Amazon Alexa that I'm happy to lend to a team to use. It'll be available on a first-come, first-serve basis, so shoot me an email if you'd like to use it. Taken!
The Sandbox (new CS makerspace) has a lot of hardware that can be used for projects, along with guidance and advice! If you haven't worked with hardware before, this is a great opportunity to get started and try it out. If you haven't been to Sandbox before, it is located in CSIC 3107, just on your right before you walk across the bridge to AVW.
If you are looking for any kind of hardware, or if you have hardware that you think others might be interested in using, make a post on Piazza!
There are a handful of opportunities to submit your project into competitions and compete for prizes! Here are a few:
- Alexa Skills Challenge Offers $250,000 in prizes for Best Kid Skills
- Amazon IoT Challenge (Nov 16th deadline!)
- Online hackathons
- Or in-person hackathons over the weekends! (Check Terrapin Hackers. If we have a bus then you don't need to be admitted, just hop on!)
Are we limited to any language or can we use any language of our choice?
You are welcome to use whichever language of your choice. Though keep in mind that Python would be the preferred choice, since both TAs are experienced with the language and the AWS libraries, so we'll be able to help out more.
If you choose another language, make sure to address this in your proposal.
Can we work in teams or do we need to work on our own?
I heavily encourage you to work as a single-person team, since building a full project on your own is much more meaningful to employers then team projects where your contributions are harder to pinpoint.
However, if there is a situation where two students really want to work together, then you can go for it. I will expect the scope of the project to be double in size to account for two teammates working together. If you want to work on a team project, shoot me an email soon with an overview of what you want to build, so that I can get back to you ASAP on whether it is the right scope for a two-person team.