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.sh
to lint the cypher file (import.cyp
)
This needs some work...
Model
,Framework
andMethod
, e.g. Scrum, XP and Kanban haveRole
s andArtifact
s and (Pattern
ORPractices
)Pattern
has aProblem
/Context
/Smell
and 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 Model
s and Framework
s) are typically guided by Principal
s.
MATCH (n)-[:GUIDED_BY]->(p:Principle) WHERE n:Model OR n:Framework OR n:Method RETURN (n), (p)
They also contain core Practice
s.
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 Link
s 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 Measure
s:
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_TO
relationships, which are not descriptive