{"id":19514893,"url":"https://github.com/ndp/agile_methods","last_synced_at":"2025-10-15T04:28:32.813Z","repository":{"id":672734,"uuid":"316157","full_name":"ndp/agile_methods","owner":"ndp","description":"Visualization of different agile methodologies","archived":false,"fork":false,"pushed_at":"2015-04-25T21:13:00.000Z","size":875,"stargazers_count":17,"open_issues_count":0,"forks_count":7,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-04-06T18:14:15.843Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ndp.png","metadata":{"files":{"readme":"README.markdown","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2009-09-24T07:07:09.000Z","updated_at":"2024-11-05T12:50:22.000Z","dependencies_parsed_at":"2022-08-16T10:40:12.321Z","dependency_job_id":null,"html_url":"https://github.com/ndp/agile_methods","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ndp%2Fagile_methods","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ndp%2Fagile_methods/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ndp%2Fagile_methods/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ndp%2Fagile_methods/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ndp","download_url":"https://codeload.github.com/ndp/agile_methods/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":249149822,"owners_count":21220807,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":[],"created_at":"2024-11-10T23:37:57.164Z","updated_at":"2025-10-15T04:28:27.754Z","avatar_url":"https://github.com/ndp.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"Visualization of agile practices running here:\n\n\u003ca href=\"http://ndpsoftware.com/agile_methods/agile_methods.html\"\u003ehttp://ndpsoftware.com/agile_methods/agile_methods.html\u003c/a\u003e (If it seems to draw garbage all over the screen, refresh the page. More on that later.)\n\nWhat it shows is the main concepts of 5 different agile viewpoints: XP, Scrum, the Agile Manifesto, Lean and Getting Real. Important words for a practice are \"attracted\" to (gravitationally) to the practices that mention them in their canonical definition.\n\n\n### Motivation\n\nThere are different flavors of agile. I discuss the differences coherently, but I wondered if there were some way to distill the differences down to something that could be represented in one page. A cheat sheet. All these practices share some history and concepts, but can be they  be presented and compared in a fairly simplistic way? Each emphasizes different things, but how do they compare?\n\n\n### Building the Visualization\n\nThe first challenge was to identify the top few values and concepts that define each practice. My idea was to summarize each practice by finding the canonical description of each practice and capture the top concepts as succinctly as possible. \n\nSo I identified a primary source for each practice. This is arbitrary but not capricious. I believe I was picking reasonable documents:\n\n\u003col\u003e\n\u003cli\u003eXP: \u003ca href=\"http://www.extremeprogramming.org/\"\u003ehttp://www.extremeprogramming.org/\u003c/a\u003e\n\u003cli\u003eAgile Manifesto: \u003ca href=\"http://agilemanifesto.org/\"\u003ehttp://agilemanifesto.org/\u003c/a\u003e, \u003ca href=\"http://agilemanifesto.org/principles.html\"\u003ehttp://agilemanifesto.org/principles.html\u003c/a\u003e\n\u003cli\u003eScrum: Agile Software Development with Scrum, Chapter 9; and \u003ca href=\"http://en.wikipedia.org/wiki/Scrum_(development)\"\u003ehttp://en.wikipedia.org/wiki/Scrum_(development)\u003c/a\u003e\n\u003cli\u003eLean Software: \u003ca href=\"http://en.wikipedia.org/wiki/Lean_software_development\"\u003ehttp://en.wikipedia.org/wiki/Lean_software_development\u003c/a\u003e\n\u003cli\u003eGetting Real: from page 2 of the book\n\u003c/ol\u003e\n\n\nNext, I needed to extract the concepts. I created a spreadsheet and listed concepts down the left side, and practices across the top. I put a number in any box where the practice mentioned the concept as one of its first. The first concept mentioned on the page got a \"1\", and the 10th one got a \"10\". I didn't collect concepts much beyond that. I ended up with a big grid like this:\n\n\n\u003ctable\u003e\n\t\u003ctr\u003e\n\t\t\u003cth\u003e\u003c/th\u003e\n\t\t\u003cth\u003eXP/\u003c/th\u003e\n\t\t\u003cth\u003eAgile Manifesto\u003c/th\u003e\n\t\t\u003cth\u003eScrum\u003c/th\u003e\n\t\t\u003cth\u003eLean\u003c/th\u003e\n\t\u003c/tr\u003e\n\t\u003ctr\u003e\n\t\t\u003cth\u003eFace-to-face communication\u003c/th\u003e\n\t\t\u003cth\u003e\u003c/th\u003e\n\t\t\u003cth\u003e1\u003c/th\u003e\n\t\t\u003cth\u003e\u003c/th\u003e\n\t\t\u003cth\u003e\u003c/th\u003e\n\t\u003c/tr\u003e\n\t\u003ctr\u003e\n\t\t\u003cth\u003eIndividuals\u003c/th\u003e\n\t\t\u003cth\u003e\u003c/th\u003e\n\t\t\u003cth\u003e1\u003c/th\u003e\n\t\t\u003cth\u003e\u003c/th\u003e\n\t\t\u003cth\u003e\u003c/th\u003e\n\t\u003c/tr\u003e\n\t\u003ctr\u003e\n\t\t\u003cth\u003eWorking Software\u003c/th\u003e\n\t\t\u003cth\u003e\u003c/th\u003e\n\t\t\u003cth\u003e2\u003c/th\u003e\n\t\t\u003cth\u003e\u003c/th\u003e\n\t\t\u003cth\u003e\u003c/th\u003e\n\t\u003c/tr\u003e\n\t\u003ctr\u003e\n\t\t\u003cth\u003eCollaborate with Customers \u003c/th\u003e\n\t\t\u003cth\u003e\u003c/th\u003e\n\t\t\u003cth\u003e3\u003c/th\u003e\n\t\t\u003cth\u003e\u003c/th\u003e\n\t\t\u003cth\u003e\u003c/th\u003e\n\t\u003c/tr\u003e\n\t\u003ctr\u003e\n\t\t\u003cth\u003eRespond to Change\u003c/th\u003e\n\t\t\u003cth\u003e\u003c/th\u003e\n\t\t\u003cth\u003e4\u003c/th\u003e\n\t\t\u003cth\u003e\u003c/th\u003e\n\t\t\u003cth\u003e\u003c/th\u003e\n\t\u003c/tr\u003e\n\t\u003ctr\u003e\n\t\t\u003cth\u003eCustomer Satisfaction\u003c/th\u003e\n\t\t\u003cth\u003e1\u003c/th\u003e\n\t\t\u003cth\u003e\u003c/th\u003e\n\t\t\u003cth\u003e\u003c/th\u003e\n\t\t\u003cth\u003e\u003c/th\u003e\n\t\u003c/tr\u003e\n\t\u003ctr\u003e\n\t\t\u003cth\u003eWorking Software\u003c/th\u003e\n\t\t\u003cth\u003e2\u003c/th\u003e\n\t\t\u003cth\u003e\u003c/th\u003e\n\t\t\u003cth\u003e\u003c/th\u003e\n\t\t\u003cth\u003eetc.\u003c/th\u003e\n\t\u003c/tr\u003e\n\u003c/table\u003e\n\n\nAs the terminologies of each practice differ, I had a sparse spreadsheet with only a few data points. It wasn't helpful in comparing the practices.\n\nSo went through a normalization process. Is a \"sprint\" the same thing as an \"iteration\"? Well yes (and no). What's a \"project heartbeat?\" and is it the same thing? I combined rather aggressively the first time I did it, but what you see is a second, more conservative approach. There are still problems, but I took a pretty good shot.\n\nEven with the \"normalized spreadsheet\", though, it wasn't easy to compare the practices. I tried different sorting and coloring to no avail. I then tried different graphing options, starting first with \"mind maps\". I tried 3-d bar charts, but they were little help. And plotting the words in grids, but couldn't make it work.\n\nI finally stumbled upon the visual thesaurus metaphor. As a regular thesaurus, I always thought the display a bit gratuitous: a word in the center with its synonyms \"floating around\", connected by some gravity. The more I thought about it, though, the better fit it seemed.\n       \nNext I needed a tool in which to implement my visualization. You can license the technology, but I had a $0 budget and just a few hours to devote to it. I looked at using Processing (a Java variant that lots of people are using to build visualizations); there were some implementations, but I wanted something even lighter weight if possible. After another Google or two, and I found Javascript-based experiments with \"force directed graphs\". I grabbed the code, and threw my data in it.\n\nActually, there was a little engineering involved. I knew I would update the spreadsheet (and I wanted to add other practices potentially), so instead of converting the spreadsheet directly to the Javascript, I wrote a Ruby script that takes the spreadsheet and generates JSON data structures. The structures are then fed into a small engine I wrote, and the graphic is created.\n\nCode available \u003ca href=\"http://github.com/ndp/agile_methods\" target=\"_blank\"\u003ehttp://github.com/ndp/agile_methods\u003c/a\u003e \n\nTo modify, edit the Numbers spreadsheet. \n\nAfter you have edited it, copy and paste column B-J into agile_methods.txt. This\nputs one cell per line.\n\nRun:  ruby txt_to_json.rb agile_methods.txt \u003eagile_methods.js\n\nOpen up agile_methods.html.\n\n\u003cbr /\u003e\n\u003ca rel=\"license\" href=\"http://creativecommons.org/licenses/by-sa/3.0/us/\"\u003e\u003cimg alt=\"Creative Commons License\" style=\"border-width:0\" src=\"http://i.creativecommons.org/l/by-sa/3.0/us/88x31.png\" /\u003e\u003c/a\u003e\u003cbr /\u003e\u003cbr /\u003e\u003cbr /\u003e\u003cspan xmlns:dc=\"http://purl.org/dc/elements/1.1/\" href=\"http://purl.org/dc/dcmitype/InteractiveResource\" property=\"dc:title\" rel=\"dc:type\"\u003eAgile Software Methodologies Visualization\u003c/span\u003e by \u003ca xmlns:cc=\"http://creativecommons.org/ns#\" href=\"http://ndpsoftware.com/agile_methods/agile_methods.html\" property=\"cc:attributionName\" rel=\"cc:attributionURL\"\u003eAndrew J. Peterson\u003c/a\u003e is licensed under a \u003ca rel=\"license\" href=\"http://creativecommons.org/licenses/by-sa/3.0/us/\"\u003eCreative Commons Attribution-Share Alike 3.0 United States License\u003c/a\u003e.\u003cbr /\u003eBased on a work at \u003ca xmlns:dc=\"http://purl.org/dc/elements/1.1/\" href=\"http://www.kylescholz.com/blog/2006/06/force_directed_graphs_in_javas.html\" rel=\"dc:source\"\u003ewww.kylescholz.com\u003c/a\u003e.\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fndp%2Fagile_methods","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fndp%2Fagile_methods","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fndp%2Fagile_methods/lists"}