{"id":19881331,"url":"https://github.com/nike-inc/tdd-training-cube","last_synced_at":"2026-01-30T16:53:37.753Z","repository":{"id":71533109,"uuid":"192387656","full_name":"Nike-Inc/tdd-training-cube","owner":"Nike-Inc","description":"Papercraft cube used as training aid for Outside-In Test Driven Development","archived":false,"fork":false,"pushed_at":"2021-11-30T08:36:11.000Z","size":6526,"stargazers_count":12,"open_issues_count":0,"forks_count":4,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-06-07T11:43:23.486Z","etag":null,"topics":["mnemonic","outside-in-tdd","papercraft","tdd-workflow","test-driven-development","training-materials","uncle-bob"],"latest_commit_sha":null,"homepage":"","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"cc-by-4.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Nike-Inc.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2019-06-17T17:08:23.000Z","updated_at":"2024-07-03T18:24:54.000Z","dependencies_parsed_at":null,"dependency_job_id":"a7d88cc3-622b-4b77-9b0a-8762686e3f1d","html_url":"https://github.com/Nike-Inc/tdd-training-cube","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/Nike-Inc/tdd-training-cube","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Nike-Inc%2Ftdd-training-cube","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Nike-Inc%2Ftdd-training-cube/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Nike-Inc%2Ftdd-training-cube/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Nike-Inc%2Ftdd-training-cube/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Nike-Inc","download_url":"https://codeload.github.com/Nike-Inc/tdd-training-cube/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Nike-Inc%2Ftdd-training-cube/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28915939,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-30T16:37:38.804Z","status":"ssl_error","status_checked_at":"2026-01-30T16:37:37.878Z","response_time":66,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["mnemonic","outside-in-tdd","papercraft","tdd-workflow","test-driven-development","training-materials","uncle-bob"],"created_at":"2024-11-12T17:13:53.986Z","updated_at":"2026-01-30T16:53:37.744Z","avatar_url":"https://github.com/Nike-Inc.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# TDD Training Cube\n\nThe TDD Training Cube helps you keep track of which Outside-In Test-Driven Development phase you \nare currently operating in and what steps to take once you get there.  Print out the [.pdf file](https://github.com/Nike-Inc/tdd-training-cube/blob/master/TDDCube.pdf) [⬇](https://github.com/Nike-Inc/tdd-training-cube/raw/master/TDDCube.pdf \"Download\"), \nfollow the assembly instructions, and use the TDD Training Cube whenever you practice test-driving \nyour code.  Each face of the TDD Training Cube contains [conditions and actions](https://github.com/Nike-Inc/tdd-training-cube/blob/master/TDDCubeCheatSheet.pdf) [⬇](https://github.com/Nike-Inc/tdd-training-cube/raw/master/TDDCubeCheatSheet.pdf \"Download\") to take in order to \ntransition between TDD phases; use the up-face of the cube as a reminder of what you are doing in \neach TDD cycle.\n\n\u003cimg align=\"right\" alt=\"TDD Training Cube\" title=\"TDD Training Cube\" src=\"images/cube.png\" width=\"175\" height=\"188\"\u003eThe six\nOutside-In Test-Driven Development phases depicted on the TDD Training Cube are:\n\n* (Green, Outer, Start Here) **All Functional Tests Pass**\n* (Red, Outer) **A Functional Test is Failing**\n* (Blue, Outer) **Refactor Functional Tests** -or- **Perform DevOps Tasks**\n* (Green, Inner) **All Unit Tests Pass**\n* (Red, Inner) **A Unit Test is Failing**\n* (Blue, Inner) **Refactor Unit Tests** -or- **Refactor Production Code**\n\n\u0026nbsp;\n\n## History\n\nThe TDD Training Cube was inspired by Uncle Bob's tri-billed, red-green-refactor baseball cap.\nUncle Bob turns his cap to indicate to the viewer which TDD phase he is currently operating in \nwhile he demonstrates test-driven development.\n\n![Uncle Bob pictured wearing his red-green-refactor cap during a Clean Code screencast episode](images/UncleBobsRedGreenRefactorHat.png \"Uncle Bob and his red-green-refactor cap as seen on his Clean Code screencast episodes\")\n\nWe had our own Test-Driven Development screencast videos to produce for the TDD Learnstitute.  But, \nwe needed to track which of the six Outside-In TDD phases we were in, rather than Uncle Bob's three\nphases.  We felt it would be too silly to construct a six-billed red-green-refactor hat for our \nvideos.  So, we opted instead to create a papercraft cube where, similar to Uncle Bob's cap, the \nface of the cube displayed to the viewer indicates which TDD phase we are currently operating in.\n\n![TDD Training Cube pictured during a TDD Learnstitute screencast episode](images/CubeInLearnstitute.png \"TDD Training Cube tells us what to do next in our TDD adventures\")\n\nAlso, Harry J. W. Percival's [Obey the Testing Goat](http://www.obeythetestinggoat.com/) includes a [workflow diagram](http://www.obeythetestinggoat.com/book/chapter_working_incrementally.html#TDD-double-loop) that influenced the development of the TDD Training Cube. \n\u0026nbsp;\n\n## Protips\n\nHandy tips to get the most out of your TDD Training Cube:\n\n* Reminder: you control your cube, your cube does _not_ control you\n* TDD Training Cube power levels will naturally increase with code coverage.  **Never** exceed \n  the posted, safe, 100% code coverage limits\n* Do not taunt TDD Training Cube!\n* Do not hold your TDD Training Cube close to an LSS Training Sphere or an OE-1 Training Hyperboloid\n  due to continuity slippage risks\n* Never open the TDD Training Cube.  Though it is a wondrous item, once opened, TDD Training Cube \n  will cease to contain an extradimensional space\n\n\u0026nbsp;\n\n---\n\nThe TDD Training Cube is Copyright (C) 2019, Nike, Inc.  It is licensed under the Creative Commons \nAttribution 4.0 International license.\n\n![TDD Learnstitute Logo](images/TDDLearnstituteLogo120.png)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnike-inc%2Ftdd-training-cube","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnike-inc%2Ftdd-training-cube","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnike-inc%2Ftdd-training-cube/lists"}