Black Thursday

Black Thursday

A business is only as smart as its data. Let’s build a system to manage our data and execute business intelligence queries against the data from a typical e-commerce business.

Project Overview

Learning Goals

  • Use tests to drive both the design and implementation of code
  • Decompose a large application into components
  • Design a solution that is functional, readable, maintainable, and testable
  • Learn an agile approach to building software

Getting Started

  1. One team member forks the repository here and adds the other(s) as collaborators.
  2. Everyone on the team clones the repository
  3. Setup SimpleCov to monitor test coverage along the way
  4. Setup Rubocop
  5. Setup Hound CI
  6. Create a Rakefile

Special Notes

This project will require you to be running version 2.3.x of Ruby. This will get you used to working in an older version of Ruby and you will learn how to work with different versions of Rubies using rbenv.

Documentation for rbenv can be found here

Spec Harness

This project will be assessed with the help of a spec harness. The file includes instructions for setup and usage. Note that the spec harness is not a replacement for your own test suite.

Spec harness here

Key Concepts

From a technical perspective, this project will emphasize:

  • File I/O
  • Database Operations (CRUD)
  • Encapsulating Responsibilities
  • Light data / analytics

Project Iterations and Base Expectations

Because the requirements for this project are lengthy and complex, we’ve broken them into Iterations in their own files. Your project must implement iterations 0 through 3 and either 4 or 5.

Evaluation Rubric

The project will be assessed with the following guidelines:

  • 4: Above expectations
  • 3: Meets expectations
  • 2: Below expectations
  • 1: Well-below expectations


1. Ruby Syntax & Style

  • Applies appropriate attribute encapsulation
  • Developer creates instance and local variables appropriately
  • Naming follows convention (is idiomatic)
  • Ruby methods used are logical and readable
  • Developer implements best-choice enumerable methods
  • Code is indented properly
  • Code does not exceed 80 characters per line
  • A directory/file structure provides basic organization via lib/ and/or /test
  • Rubocop shows five or fewer complaints

2. Breaking Logic into Components

  • Code is effectively broken into methods & classes
  • Developer writes methods less than 7 lines
  • No more than 3 methods break the principle of SRP

3. Test-Driven Development

  • Each method is tested
  • Functionality is accurately covered
  • Tests implement Ruby syntax & style
  • Balances unit and integration tests
  • Evidence of edge cases testing
  • Test Coverage metrics are present (SimpleCov)
  • A test RakeTask is implemented

4. Functionality

  • Application implements iterations 0, 1, 2, 3, and either 4 or 5

5. Version Control

  • Developers commit at a pace of at least 1 commit per hour
  • Developers implements branching and PRs
  • Developer resolves Hound CI complaints on PRs
  • Commit history shows developers contributed evenly
  • The final submitted version is merged into master