Graph Thinking — Modelling Team Skills With Neo4j
I manage over 40 engineers across three accounts. When a new project comes in and the client needs someone who knows React, TypeScript, and Spreedly, I used to search through spreadsheets. That approach stopped scaling about six months ago.
Why a Graph
Team skills are inherently relational. An engineer knows languages, has worked on projects, has collaborated with other engineers, and has experience with specific clients. These are relationships, not rows. A relational database can model this, but the queries become painful fast. In a graph database, the question "find me all engineers who know React and have worked with Client X" is a natural traversal.
The Neo4j Model
(:Engineer)-[:KNOWS]->(:Skill)
(:Engineer)-[:WORKED_ON]->(:Project)
(:Project)-[:FOR_CLIENT]->(:Client)
(:Engineer)-[:COLLABORATES_WITH]->(:Engineer)
Four node types, four relationship types. That is the entire schema. I loaded our team data from Jira and our internal skills survey into Neo4j, and suddenly patterns emerged that spreadsheets never showed.
What I Discovered
We had single points of failure everywhere. Two engineers were the only people who understood our Paytronix integration. One engineer was the sole expert on our caching layer. The graph made these risks visible in seconds through simple queries about skill coverage.
The PM Value
Graph thinking is not just a database choice. It is a mental model. When I look at team composition now, I think in nodes and edges. Who connects to whom? Where are the gaps? Which skills are clustered versus isolated? This framing helps me make staffing decisions that reduce risk and build resilience. That is worth more than any Gantt chart.
←Back to all posts