For your fourth project you are given the freedom of choice! Your goal is to develop an application in your languages of choice that demonstrates substantial effort towards an end goal.
There are multiple broad end goals for this project, and you need to pick a minimum of one or more goals from the following list:
Things you can do in P4:
- Try out a new technology you've been interested in using, but that we haven't used in class. Highly encouraged!
- Create a highly polished product that can anchor your portfolio, illustrate your skills, and show substantial work in an area of interest.
- Create an application in a new language that you wish to learn.
- Develop an ambitious MVP that will serve as the basis for a larger project post-cohort.
- Develop a MERN stack application to solidify knowledge of technologies we used in class.
You have the opportunity to work solo, or in groups of your choosing, with a max size of four.
🙌 This is an exciting opportunity to use your newly developed skills as a software engineer and code to learn. 🙌
What does a passing P4 look like?
- A substantial MVP that can be presented to the class and built upon in the future.
- Consistent work (git commits everyday) on the project and a thoughtful implementation of the technologies you have choosen.
- A project that will make your portfolio shine. ✨
What does a non-passing P4 look like?
- If you do not build anything substantial.
- If you do not put in meaningful work/git commits all project days. (including over the weekend during project week)
This is a non-exhaustive list and is based on previous student's P4s
-
GraphQL (frontend querying language. Would recommend using with Hasura so that you don't have to take on Apollo and Prisma breaking change errors).
-
Unity a game development platform in C#
-
Integrating a Stripe frontend and backup to build a test level functional ecommmerce site
-
D3.js a data visualization javascript library
-
pyGame python game framework to make an interactive python desktop app
-
React-Bootstrap-Table or another React Table Library to create dynamic tables based on a database you create and seed
-
The Typescript programming language. (A good scope for a Typscript project would be making a DIY API + React Client with the express server and react client written in typescript)
-
Test-Driven Development with Jest or another testing framework (such as supertest with express or mocha along with chai).
-
Next.js frontend framework.
-
PrismaORM ORM for node and typescript
-
Vue.js frontend framework.
-
Web sockets with socket.io
-
Machine Learning with Tensorflow
-
Creating map based interfaces with mapbox
-
Web scraping, such as with beautiful soup in python
-
Using Django to make a full stack crud app in python, or along with React for a DR stack app
-
Using Flask as a back end server instead of Express and SQL Alchemey as your
ORM
, or pyMongo as anODM
-
Use Rails to make a webserver in ruby. Rails servers can use templates, similar to ejs and jinja, or can serve json to a React app, similar to the DR stack with Django and React.
-
Flutter to create mobile apps
-
Integrating a Stripe frontend and backup to build a test level functional ecommmerce site
-
Do some research in your locale's job market -- any tech stacks you keep seeing on job postings that are interesting to you? They might make a great capstone as you enter that job market.
-
A MERN stack app or PERN stack app (Postgres, Express, React, Node) app that uses advanced hooks such as useContext or useReducer for state management. You are welcome to use the class's auth templates if you choose this route.
- if you do this you could also use additional packages to style your app, such as Sass, or antoher css superset language, or styled components
-
Create a webserver using Java and Spring Boot. (A good scope for this project would be a simple Spring Boot backend that allowed for CRUD on a single model)
- Do some research in your locale's job market -- any tech stacks you keep seeing on job postings that are interesting to you? They might make a great capstone as you enter that job market.
- Talk to an instructor! Based on your interests they will be able to help guide you to techs that will be both exciting to work on and help you develop marketable skills in your area of interest.
Spend your pitch prep time, solo or with your team, researching and exploring technologies that interest you while brainstorming for your P4.
When you come up with an idea, ask yourself the following questions:
- How do you plan on learning/implementing this new technology?
- What is your goal with this project?
- Who is the user for your app?
- Any potential roadblocks you think you might run into?
Include project idea along with answers to the above questions in your README.md, also include the following in your README:
- the technologies you plan on using
- a description of the app
- wireframes of the app
- a description of the user flow for the app the app along with user stories
- If you are planning to work in a team, include the members of your team
- a breakdown of what you plan on working on each day (
sprints
for each day). - additional links/images if they relate to the planning of your project, for example a rest API project will need
ERDs
of the data models and aRESTful
routing chart of all the routes in the API
- a working app created by you, that implements your pitched project
- A
readme.md
file with:- An embedded screenshot of the app
- Explanations of the technologies used
- A couple paragraphs about the general approach you took
- Installation instructions for any dependencies
- Link to your user stories – who are your users, what do they want, and why?
- Link to your wireframes – sketches of major views / interfaces in your application
- Descriptions of any unsolved problems or major hurdles you had to overcome
- ERDs if your project has a database
- RESTful routing chart if your project has an API
- Project Workflow: Did you complete the user stories, wireframes, task tracking, and/or ERDs, as specified above? Did you use source control as expected for the phase of the program you’re in (detailed above)?
- Technical Requirements: Did you deliver a project that met all the technical requirements? Given what the class has covered so far, did you build something that was reasonably complex?
- Creativity: Did you added a personal spin or creative element into your project submission? Did you deliver something of value to the end user (not just a login button and an index page)?
- Code Quality: Did you follow code style guidance and best practices covered in class, such as spacing, modularity, and semantic naming? Did you comment your code as your instructors as we have in class?
- Problem Solving: Are you able to defend why you implemented your solution in a certain way? Can you demonstrated that you thought through alternative implementations? (Note that this part of your feedback evaluation will take place during your one-on-one code review with your instructors, after you've completed the project.)
This project will be graded on a Pass/Fail basis
The Pass/Fail score will serve as a helpful overall gauge of whether you met the project goals, but the more important scores are the individual ones above, which can help you identify where to focus your efforts for the next project!
Take some time to explore the tech you are interested in.
- Implement a hello world app with your new tech! 🌎
- Start tinkering! 🛠
- Have some fun! 🎊
you should create a proof of concept
or hello world app
to learn the new technology, pulling in external resources is highly encouraged .
If you're playing with something new, it's a great idea to test that out on a basic level. For example: with TypeScript, get a Hello World display with Typescript and create-react-app. If you're working with a new back end, make sure you can add data in a shell according to some basic model. If you're working with a new front end technology, use it to build something that displays with it.
If you're using an API, make sure you can hit its end points from Postman or a route on your own back end, AND that you're getting back all the data you might want when you move to the front end.
- Don’t get too caught up in too many awesome features – simple is always better. Build something impressive that does one thing well.
- Design first. Planning with user stories & wireframes before writing code means you won't get distracted changing your mind – you'll know what to build, and you can spend your time wisely by just building it.
- Don’t hesitate to write throwaway code to solve short term problems.
- Read the docs for whatever technologies / frameworks / API’s you use.
- Write your code DRY and build your APIs RESTful.
- Be consistent with your code style. You're working in teams, but you're only making one app per team. Make sure it looks like a unified effort.
- Commit early, commit often. Don’t be afraid to break something because you can always go back in time to a previous version.
- Keep user stories small and well-defined, and remember – user stories focus on what a user needs, not what development tasks need accomplishing.
- Write code another developer wouldn't have to ask you about. Do your naming conventions make sense? Would another developer be able to look at your app and understand what everything is?
- Make it all well-formatted. Are you indenting, consistently? Can we find the start and end of every div, curly brace, etc?
- Comment your code. Will someone understand what is going on in each block or function? Even if it's obvious, explaining the what & why means someone else can pick it up and get it.
- Write pseudocode before you write actual code. Thinking through the logic of something helps.