Skip to main content Skills Marketplace Découvrez et explorez les compétences IA créées par la communauté.
Métiers associés SOC
Basé sur la classification professionnelle SOC
Installer avec Codex ou Claude Copiez ce prompt, collez-le dans Codex, Claude ou un autre assistant, puis laissez-le vérifier la page du skill et l'installer pour vous.
Copier le promptAfficher les détails du prompt Une commande directe contourne le prompt de vérification. Examinez la source avant de l'exécuter.
npx skills add https://github.com/ffsshhttiikk/opencode-agents-skills --skill kanbanLa commande reste sur une seule ligne. Faites défiler horizontalement pour la vérifier avant de la copier.
Vous préférez une copie locale ? Téléchargez les fichiers actuellement disponibles dans SkillsMP.
Télécharger Zip Téléchargement... name Kanban description Visual workflow management method for optimizing value delivery through continuous flow license MIT compatibility ["Python","JavaScript","Java","Go","All Teams"] audience Software Developers, DevOps Engineers, Operations Teams category software-development
Kanban
What I Do
I provide expertise in Kanban, a visual workflow management system that originated from Toyota's manufacturing processes and has been adapted for software development. Kanban focuses on visualizing work, limiting work-in-progress (WIP), and maximizing flow efficiency to deliver value continuously. Unlike Scrum's time-boxed iterations, Kanban allows work items to flow through the system as soon as capacity is available, making it ideal for operations teams, support teams, and development teams with continuous delivery pipelines or unpredictable incoming work.
When to Use Me
Use Kanban when you have continuous flow of work items (bug fixes, support tickets, deployments), need to optimize existing processes without disrupting team structure, want to reduce cycle time and lead time, or work in operations, SRE, or customer support roles. Kanban excels when work arrives unpredictably and cannot be batched into sprints. It complements Scrum well (Scrumban) for teams that want Scrum's structure with Kanban's flexibility. Avoid Kanban when your team needs the discipline of fixed iterations or when ceremonies like sprint planning provide necessary structure.
Core Concepts
Kanban Board : Visual representation of workflow with columns representing process stages
Work-In-Progress (WIP) Limits : Maximum number of items allowed in each column to prevent multitasking
Classes of Service : Different handling priorities for different work types (expedited, standard, fixed date)
Lead Time : Time from work request submission to completion
Cycle Time : Time from work starting to completion
Throughput : Number of work items completed per unit of time
Cumulative Flow Diagram : Visualization showing work item distribution across states over time
Pull System : Team members pull work when capacity is available, rather than work being pushed
Swimlanes : Horizontal lanes on board for categorizing work (team, priority, work type)
Work Item Age : Time a work item has been in its current state, indicating potential blockers
Code Examples
from dataclasses import dataclass, field
from datetime import datetime, timedelta
from typing import List , Dict , Optional
from enum import Enum
import statistics
class WorkItemType (Enum ):
USER_STORY = "user_story"
BUG = "bug"
TECH_DEBT = "tech_debt"
SUPPORT = "support"
SPIKE = "spike"
class Priority (Enum ):
EXPEDITED = 1
HIGH = 2
MEDIUM = 3
LOW = 4
@dataclass
class WorkItem :
"""Represents a work item on the Kanban board"""
id : str
title: str
item_type: WorkItemType
priority: Priority
created_at: datetime
started_at: Optional [datetime] = None
completed_at: Optional [datetime] = None
current_state: str = "BACKLOG"
blocked: bool = False
blocked_reason: Optional [str ] = None
cycle_time_hours: Optional [float ] =
( ) -> [ ]:
.started_at .completed_at:
delta = .completed_at - .started_at
.cycle_time_hours = delta.total_seconds() /
.cycle_time_hours
( ) -> :
reference = .started_at .created_at
delta = datetime.now() - reference
delta.total_seconds() /
:
name:
wip_limit: [ ] =
items: [WorkItem] = field(default_factory= )
( ) -> :
.wip_limit ( .items) >= .wip_limit
( ) -> :
.is_at_capacity():
item.current_state = .name
.items.append(item)
( ) -> :
item .items:
.items.remove(item)
to_column.add_item(item)
:
( ):
.name = name
.columns = {
name: KanbanColumn(name, limit)
name, limit columns.items()
}
.all_items: [ , WorkItem] = {}
( ) -> :
item_id .all_items:
item = WorkItem(
=item_id,
title=title,
item_type=item_type,
priority=priority,
created_at=datetime.now()
)
.all_items[item_id] = item
backlog = .columns.get( )
backlog:
backlog.add_item(item)
( ) -> :
item = .all_items.get(item_id)
item:
current_col_name = item.current_state
current_col = .columns.get(current_col_name)
target_col = .columns.get(target_column)
current_col target_col:
started item.started_at:
item.started_at = datetime.now()
current_col.move_item(item, target_col)
( ) -> :
item = .all_items.get(item_id)
item:
item.completed_at = datetime.now()
item.calculate_cycle_time()
.advance_item(item_id, )
( ) -> :
completed = [
item item .all_items.values()
item.completed_at item.completed_at >= since
]
item_types:
completed = [i i completed i.item_type item_types]
(completed)
( ) -> :
completed = [
item item .all_items.values()
item.item_type == item_type item.completed_at
]
completed:
lead_times = [
(item.completed_at - item.created_at).total_seconds() /
item completed
]
statistics.mean(lead_times)
( ) -> :
with_cycle_time = [
item item .all_items.values()
item.item_type == item_type item.cycle_time_hours
]
with_cycle_time:
statistics.mean(item.cycle_time_hours item with_cycle_time)
( ) -> [WorkItem]:
[item item .all_items.values() item.blocked]
( ) -> [ , ]:
{
name: (col.items)
name, col .columns.items()
name [ , ]
}
class KanbanMetrics :
"""Calculates and tracks Kanban metrics for process improvement"""
def __init__ (self, board: KanbanBoard ):
self .board = board
def cumulative_flow_data (
self,
since: datetime
) -> Dict [str , Dict [str , int ]]:
"""Generate cumulative flow diagram data"""
flow_data = {}
for item in self .board.all_items.values():
if item.created_at >= since:
if item.id not in flow_data:
flow_data[item.id ] = {}
flow_data[item.id ][item.current_state] = item.created_at
return flow_data
def throughput_last_n_days (self, days: int ) -> float :
"""Calculate average daily throughput"""
since = datetime.now() - timedelta(days=days)
total = self .board.get_throughput(since)
return total / days
def aging_items_report (self, threshold_hours: float ) -> List [WorkItem]:
"""Identify items aging beyond threshold"""
return [
item for item .board.all_items.values()
item.completed_at item.age_hours() > threshold_hours
]
( ) -> [ , ]:
random
simulations = []
_ (iterations):
sample = random.choice(historical_throughputs)
simulations.append(sample)
{
: (simulations)[iterations // ],
: (simulations)[ (iterations * )],
: (simulations)[ (iterations * )]
}
Best Practices
Start with your current workflow and visualize it before adding WIP limits
Set initial WIP limits based on team size, typically 1.5-2x the number of team members
WIP limits should cause conversation, not panic—they signal capacity problems to address
Use classes of service to handle different work types with appropriate handling policies
Measure and track cycle time consistently to identify bottlenecks and improvement opportunities
Hold regular board reviews to discuss flow issues, blockers, and process improvements
Make the board visible to all stakeholders for transparency and shared understanding
Limit work types on the board to reduce complexity and cognitive load
Use swimlanes for high-level categorization without over-fragmenting the board
Continuously evolve WIP limits based on empirical data and team feedback
Common Patterns
DevOps Kanban : Visualizing CI/CD pipeline stages with WIP limits on build, test, deploy
Bug Triage Kanban : Prioritized workflow for handling incoming support tickets
Feature Team Kanban : Cross-functional teams with separate lanes for different product areas
Portfolio Kanban : Managing work at portfolio level with epic, feature, and story swimlanes
Double-Loop Kanban : Inner loop for development, outer loop for strategic initiatives
None
def
calculate_cycle_time
self
Optional
float
"""Calculate cycle time once item is completed"""
if
self
and
self
self
self
self
3600
return
self
return
None
def
age_hours
self
float
"""Calculate current item age in hours"""
self
or
self
return
3600
@dataclass
class
KanbanColumn
"""Represents a column on the Kanban board with WIP limits"""
str
Optional
int
None
List
list
def
is_at_capacity
self
bool
"""Check if column has reached WIP limit"""
return
self
is
not
None
and
len
self
self
def
add_item
self, item: WorkItem
bool
"""Add item to column if within WIP limit"""
if
self
return
False
self
self
return
True
def
move_item
self, item: WorkItem, to_column: 'KanbanColumn'
bool
"""Move item to another column"""
if
in
self
self
return
return
False
class
KanbanBoard
"""Manages Kanban board operations and flow metrics"""
def
__init__
self,
name: str ,
columns: Dict [str , Optional [int ]]
self
self
for
in
self
Dict
str
def
add_item
self,
item_id: str ,
title: str ,
item_type: WorkItemType,
priority: Priority
bool
"""Add new work item to backlog"""
if
in
self
return
False
id
self
self
"BACKLOG"
if
return
return
True
def
advance_item
self,
item_id: str ,
target_column: str ,
started: bool = False
bool
"""Move item through workflow"""
self
if
not
return
False
self
self
if
not
or
not
return
False
if
and
not
return
def
complete_item
self, item_id: str
bool
"""Mark item as completed"""
self
if
not
return
False
return
self
"DONE"
def
get_throughput
self,
since: datetime,
item_types: Optional [List [WorkItemType]] = None
int
"""Calculate throughput (items completed per time period)"""
for
in
self
if
and
if
for
in
if
in
return
len
def
get_lead_time
self, item_type: WorkItemType
float
"""Calculate average lead time for item type"""
for
in
self
if
and
if
not
return
0.0
3600
for
in
return
def
get_cycle_time
self, item_type: WorkItemType
float
"""Calculate average cycle time for item type"""
for
in
self
if
and
if
not
return
0.0
return
for
in
def
identify_blocked_items
self
List
"""Find all items that are blocked"""
return
for
in
self
if
def
get_wip_by_column
self
Dict
str
int
"""Get WIP count for each column"""
return
len
for
in
self
if
not
in
"BACKLOG"
"DONE"
in
self
if
not
and
def
monte_carlo_throughput
self,
historical_throughputs: List [int ],
iterations: int = 1000
Dict
str
float
"""Monte Carlo simulation for throughput prediction"""
import
for
in
range
return
"p50"
sorted
2
"p85"
sorted
int
0.85
"p95"
sorted
int
0.95