Guideline rules for building and maintaining a skills-matrix & cross-training platform (Slack/Trello integrations) that supports continuous learning in software teams.
Your team's expertise is trapped in silos, and it's costing you velocity. When the React expert goes on vacation, your sprint grinds to a halt. When the database guru leaves, tribal knowledge walks out the door. Manual skills tracking in spreadsheets is a joke—outdated the moment you save it.
Every engineering manager knows the pain:
The result? Bus factor of 1 for critical systems, context-switching chaos during code reviews, and a team that can't adapt when priorities shift.
These Cursor Rules build a living, breathing skills management platform that integrates directly into your team's daily workflow through Slack and Trello. Instead of fighting with spreadsheets and forgotten training docs, you get:
Real-time skills visibility with Slack commands that keep your skills matrix current:
// User updates their skills instantly
/skill add typescript expert
/skill add aws proficient
/skill list @teammate // See who can help with what
Automated training plan execution via Trello integration that tracks progress without micromanagement:
interface TrainingPlan {
id: PlanId;
targetRole: 'fullstack' | 'devops' | 'frontend';
learner: UserId;
mentor: UserId;
trelloBoardId: string;
milestones: Milestone[];
dueDate: Date;
}
Smart gap detection that surfaces skills risks before they become problems:
// Automated alerts when critical skills have single points of failure
const skillRisk = await assessSkillCoverage({
skill: 'kubernetes',
minimumExperts: 2,
currentExperts: 1
}); // Triggers Slack notification to plan manager
Eliminate Context-Switching Guesswork: No more digging through team directories or bothering people to find out who knows Terraform. Slash commands give instant skills visibility.
Accelerate Onboarding: New hires get structured learning paths with clear milestones, mentor assignments, and progress tracking that doesn't rely on manager check-ins.
Reduce Single Points of Failure: Systematic cross-training ensures critical knowledge lives in multiple heads, with automated alerts when coverage drops below safe thresholds.
Increase Team Flexibility: When priorities shift, you can quickly identify who has relevant skills or who's ready to level up through existing training plans.
Before the sprint starts, your platform automatically analyzes story requirements against team skills:
// Auto-generated skills analysis for sprint stories
const sprintAnalysis = await analyzeSprintSkills({
stories: sprintBacklog,
teamSkills: currentSkillsMatrix
});
// Slack notification: "⚠️ 3 stories require React Native expertise.
// Only @sarah has advanced level. Consider pairing or training."
A developer wants to learn GraphQL:
/skill goal add graphql proficient
// System automatically suggests mentors based on:
// - Current GraphQL experts on the team
// - Mentor availability and past success rates
// - Creates Trello board with learning milestones
// - Schedules check-ins and progress reviews
Your PostgreSQL expert gives two weeks notice:
// Automated risk assessment triggered by team changes
const riskAssessment = await assessDepartureImpact({
leavingEmployee: '[email protected]',
criticality: 'high'
});
// Creates emergency cross-training plan
// Identifies knowledge transfer sessions
// Updates skills matrix to reflect reduced coverage
# Clone and initialize the platform
git clone your-skills-platform
npm install
cp .env.example .env
# Configure integrations
# Add Slack app credentials
# Add Trello API keys
# Set up PostgreSQL connection
Define your team's skill taxonomy:
// skills-config.ts
export const skillCategories = {
frontend: ['react', 'typescript', 'css', 'nextjs'],
backend: ['nodejs', 'postgresql', 'express', 'graphql'],
devops: ['aws', 'kubernetes', 'terraform', 'docker'],
mobile: ['react-native', 'ios', 'android']
} as const;
Install the Slack app and set up slash commands:
// Slash commands automatically available:
/skill add <technology> <level> // Update your skills
/skill list [@user] // View skills matrix
/skill gap <project> // Identify skill gaps
/training create <target-role> // Start cross-training plan
/training progress // Check your learning status
Training plans auto-generate Trello boards with structured learning paths:
// Example board structure for "Backend → Full-stack" transition
const trainingBoard = {
lists: [
'Learning Objectives',
'In Progress',
'Code Review',
'Completed',
'Blocked/Questions'
],
cards: generateLearningMilestones(targetRole)
};
Week 1: Complete skills visibility across your team with real-time Slack integration
Week 2: First cross-training plans active with automated progress tracking
Month 1: 40% faster task assignment during sprint planning due to skills clarity
Quarter 1: Zero critical knowledge gaps, 60% improvement in code review coverage across technologies
Concrete Metrics You'll See:
Your team transforms from a collection of specialists into a truly cross-functional unit where knowledge flows freely and skills gaps become opportunities for growth rather than blockers.
The platform runs itself—skills stay current through daily Slack interactions, training progresses through Trello automation, and you get the intelligence you need to make smart staffing and development decisions.
Ready to eliminate skills silos and unlock your team's full potential? These Cursor Rules give you everything you need to build a skills management system that actually works with how developers work.
You are an expert in TypeScript, Node.js, Express, Slack API, Trello API, PostgreSQL, and Agile team processes.
Key Principles
- Build tooling that reinforces a culture of continuous learning and cross-functional collaboration.
- Prefer declarative, functional code; minimise mutable state.
- Follow Domain-Driven Design: `training`, `skills`, and `reporting` are separate bounded contexts.
- Infrastructure as Code; every resource (DB, secrets, Slack apps) is reproducible.
- Documentation is part of the definition of done: README + OpenAPI + ADR.
- Security-first: least privilege tokens, encrypted secrets, GDPR-compliant user data handling.
TypeScript
- `strict` mode always enabled; no `any` unless wrapped in `unknown → validate()`.
- Use `interface` for contracts, `type` for unions/aliases.
`interface Skill { id: SkillId; name: string; category: SkillCategory }`
- Organise source: `src/{domain}/{feature}/{file}.ts`.
- No default exports; named exports only to avoid silent breaking changes.
- Top-level `async` functions must return typed `Result<T, E>` (fp-ts or custom).
- Prefer optional chaining & nullish coalescing; disallow `==`.
- ESLint rules: `@typescript-eslint/no-floating-promises`, `prefer-const`, `no-restricted-syntax` (for-in / with).
Error Handling and Validation
- Validate external input (Slack slash commands, Trello webhooks, HTTP body) with Zod schemas.
`const SkillUpdateSchema = z.object({ userId: z.string().uuid(), skill: z.string(), level: z.enum(['novice','proficient','expert']) })`
- Always parse & validate before business logic; fail fast, respond with 400 + details.
- Wrap awaited promises in `try/catch`; convert infrastructural errors to domain errors (`DB_ERROR`, `SLACK_HTTP_ERROR`).
- Use `pino` for structured logging; include `correlationId`, `userId`, `feature`.
- Return human-readable messages to Slack; never leak stack traces.
Express (Framework-Specific Rules)
- Thin controllers: parse request → call service → map `Result` to HTTP/Slack response.
- Services are pure functions: `(deps) => async (command) => Result`.
- Inject dependencies through a typed `Context` (DB, trelloClient, slackClient) for testability.
- Rate-limit incoming webhook routes (`express-rate-limit`, 10 req/min/user).
- Health route `/status` returns build SHA and DB connectivity.
Slack Integration Rules
- Use slash commands for user self-assessment: `/skill add typescript expert`.
- Ephemeral responses for confirmations, channel messages for achievements.
- Use modal views for multi-step training plan creation; validate each step.
- Store user OAuth tokens encrypted with AWS KMS.
Trello Integration Rules
- Each cross-training plan is a Trello board; lists = learning stages.
Use board custom fields to store `ownerUserId`, `targetRole`, `dueDate`.
- Webhook on card movement → PATCH `/training/:planId/progress`.
- Respect Trello API rate limits (100 req/10 s); queue writes with BullMQ.
Database (PostgreSQL)
- Schema versioned with `dbmate`; migrations reviewed in PRs.
- Tables: `skills`, `users`, `user_skills`, `training_plans`, `plan_events`.
- Use UUID PKs, `created_at`/`updated_at` triggers, soft-delete via `deleted_at`.
Testing
- 100 % type coverage; 80 % branch coverage minimum.
- Use `vitest` + `supertest` for HTTP routes, `nock` for Slack/Trello mocks.
- Contract tests: generate example Slack payloads from production logs nightly.
- E2E pipeline: spin up `docker-compose up services` then run tests.
Performance
- Cache skills matrix read-only queries with Redis (TTL 10 min).
- Paginate list endpoints; default 25, max 100.
- Use Node 20 LTS; enable `--max-old-space-size=2048` in production.
Security
- Enforce HTTPS; reject any `x-forwarded-proto !== https`.
- Rotate Slack signing secret & Trello API keys quarterly; automate alerts.
- All JWTs signed with RS256, 15 min expiry, refresh tokens 7 days.
- Run `npm audit --production` in CI; block on critical vulnerabilities.
CI/CD
- GitHub Actions: lint → test → build Docker → push → deploy (ArgoCD).
- If coverage drops below threshold, fail build.
- Use semantic-release to automate changelog and version tags.
Documentation
- Autogenerate OpenAPI from `express-zod-api`; publish to SwaggerHub.
- README must include local-setup, common commands, architecture diagram.
- Diagram cross-training flow: User → Slack slash command → Service → DB & Trello → Slack response.
Common Pitfalls & Guidance
- Don’t treat cross-training as side project: schedule dedicated sprints, track velocity impact.
- Keep skills matrix current: nightly job flags stale assessments (>90 days) and pings users.
- Avoid Trello board sprawl: archive plans when `completed_at` set.
- Educate users on data privacy; let them opt-out of public skill levels.