Exercise Monday

Goal: For the next three days you'll exercise all the coding knowledge you've gained over the last 5 weeks by working in groups of four on the cumulative group project you signed up for. At the end of the week we'll present these projects at our Trade Show.

Warm Up

Before you begin coding, review the suggested workflow below, and complete the first three steps with your group:


1. Planning

Decide upon goals for your app. Separate all goals into three general categories:

  • Things we need: Features and functionalities absolutely essential to the application. Or, the minimum viable product (MVP). An MVP is a demonstrable prototype of your idea with basic and essential core elements in place.
  • Things we want: Goals that aren't necessary for the minimum viable product, but are still important to your team and overall quality of your application.
  • Things on our wishlist: Goals that are non-essential, but would be great to include if there's enough time. This often includes fun bonus features, and exploring new technologies.

2. Wire-framing

With the 'things we need' or MVP in mind, brainstorm the 'flow' of your application. This doesn't necessarily mean the styling, but how a user will interact with your site. What will greet them on the homepage? Where will they go in order to see X, Y, or Z? How many pages or sections will your site contain? Draft up a general idea of how you'd like today's project to work.

3. Gameplan

Agree upon what each pair will work on. Begin with core functionality outlined in your "things we need" list. Remember, pairs shouldn't only focus on the concepts they're already good at, but should also take this opportunity to practice the ones they may not yet feel confident in.

Also, discuss how each pair will complete the tasks assigned to them. Will they create constructors? Prototypes? Begin implementing user interface logic?

4. Code

On separate branches, begin coding in two groups of two. Remember to commit frequently, including clear and descriptive messages. Review lessons on branching and merging if necessary.

5. Review and Merge

After one group has completed a main feature or requirement listed above, review their code together as a team. Provide constructive feedback. Is it well-refactored? Does it complete the task at hand? Is it easy to follow?

Merge this code into your master branch after everyone has had the opportunity to review it. No code should enter the master branch without being reviewed, refactored, and discussed. Assess and resolve any merge conflicts as a team.

6. Repeat!

Repeat steps 4 and 5 for each feature. As the project develops, you may need to re-assess goals. Sometimes features we expected to complete quickly end up taking the longest. Sometimes the things we anticipate being the most challenging are finished surprisingly quickly. Continue to merge after the completion of each main feature. After you've integrated all "things we need" goals, move on to "things we want", and eventually "wishlist" goals.


Group Project Development

For the next three days, the project is up to you!

Regardless of what your group is creating; continue writing plain English specs, committing frequently with descriptive messages, keeping business and user interface logic well separated, and including a detailed README. This will be the first larger project in your growing portfolio, make it something you're proud to show off!

Keep in mind that groups must present their projects at our Developer Trade Show on Friday, and each individual group member must submit the project as their code review this week before the end of the day on Friday. For more details on presentation and code review requirements see here.

Group Debrief

Discuss the following with your teammates at the end of each day:

  • What did we accomplish today?
  • What went well?
  • What could have gone better? How can we avoid similar issues tomorrow?
  • Where are we in terms of our needs/wants/wishlist items? Do we need to adjust these for any reason?
  • What should we focus on tomorrow, and how should this work be divvied up?