This project is a pattern repository and knowledge graph of Agile and DevOps practices and capabilities. The fundamental goal of this project is to be able to look up "smells" or metrics in the repository and find suggested practice patterns to overcome the smells or improve the metrics.
- Install Neo4J Desktop
- Paste import.cyp into Neo4J Browser
- On MacOS, run
build-macos.shto lint the cypher file (import.cyp)
This needs some work...
Model,FrameworkandMethod, e.g. Scrum, XP and Kanban haveRoles andArtifacts and (PatternORPractices)Patternhas aProblem/Context/Smelland aSolution(which might be aPractice)Measure
It's likely we'll want to traverse from Measure and Model, not from Practice (i.e. "what problem does TDD fix?" is a unlikely question)
Most root nodes in our graph are of paradigms of type Model, Framework or Method. The distinction between these node types is based on the level of rigor or practical advice: a Model is more abstract than a Framework, which is in turn more abstract than a Method. This is best illustrated as the difference between Agile (a Model), Scrum (a Framework) and Extreme Programming (a Method).
MATCH (n) WHERE n:Model OR n:Framework OR n:Method RETURN (n)Each of these three nodes (especially Models and Frameworks) are typically guided by Principals.
MATCH (n)-[:GUIDED_BY]->(p:Principle) WHERE n:Model OR n:Framework OR n:Method RETURN (n), (p)They also contain core Practices.
MATCH (n)<-[:PRACTICE_OF]->(p:Practice) WHERE n:Model OR n:Framework OR n:Method RETURN (n), (p)Who does what within the frameworks and methods?
MATCH (n)<-[:ROLE_OF]-(r:Role) RETURN (n), (r)Most of the frameworks and methods have plenty of meetings:
MATCH (n)<-[:MEETING_OF]-(e:Event) RETURN (n), (e)The artifacts of certain paradigms -- such as the Sprint Backlog in Scrum -- can be found in the graph:
MATCH (n)<-[:ARTIFACT_OF]-(a:Artifact) RETURN (n), (a)The following query will show you all the Book and Links cited for any node in the graph:
MATCH (n)-[:DESCRIBED_BY]->(r) WHERE r:Book OR r:Link RETURN (n), (r)If you want to know who wrote a particular Book, that information is available too:
MATCH (n)-[:DESCRIBED_BY]->(r)-[:WRITTEN_BY]->(p:Person) WHERE r:Book OR r:Link RETURN (n), (r), (p)Additionally, you can see if there is an Activity (e.g. a workshop) defined for the thing you're trying to demonstrate:
MATCH (n)<-[:DEMONSTRATES]-(a:Activity) RETURN (n), (a)The graph contains a bunch of Measures:
MATCH (n:Measure) RETURN (n)The above gives a reasonable introduction to the top tier of the graph, but the graph is fractal. As an example, the graph contains a Method (Kanban), the adoption of which is measured by a Model (the Kanban Maturity model). It's currently the only relationship of this type in the graph:
MATCH (m)<-[:MEASUREMENT_OF]-(n) WHERE (m:Model OR m:Framework OR m:Method) AND (n:Model OR n:Framework OR n:Method) RETURN (m), (n)Most of the work needed revolves around the questions we want to answer. For example:
- What practices can I use to improve a particular metric?
- What activities can I use to demonstrate a particular principle or set of principles?
- What resources are available to learn more about a particular practice, method or framework?
- Get rid of
:RELATES_TOrelationships, which are not descriptive