Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Assess company readiness for construction industry uberization. Analyze data transparency, process automation, and competitive positioning against open data platforms.
.claude/skills/datadrivenconstruction-uberization-readiness/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-03 | ✗→✓ | ▲ Improved | 88% | 0% |
| case-01 | ✗→✓ | ▲ Improved | 62% | 0% |
| case-02 | ✗→✓ | ▲ Improved | 67% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 114% | 0% |
| case-09 | ✗→✓ | ▲ Improved | 89% | 0% |
The construction industry faces disruption from open data platforms that bring transparency to pricing, quality, and performance. Companies that fail to adapt risk being "uberized" out of the market.
> "Traditional business model often thrives on opacity... Automation and open data bring radical transparency." — Artem Boiko
> "Working with construction companies on process automation is like trying to build a copy of Uber for taxi drivers at an airport in 2005." — Artem Boiko
┌─────────────────────────────────────────────────────────────────┐
│ TRADITIONAL vs UBERIZED CONSTRUCTION │
├─────────────────────────────────────────────────────────────────┤
│ │
│ TRADITIONAL MODEL UBERIZED MODEL │
│ ───────────────── ────────────── │
│ │
│ • Opaque pricing • Transparent rates │
│ • Relationship-based • Performance-based │
│ • Manual processes • Automated workflows │
│ • Information asymmetry • Open data access │
│ • Proprietary data • Shared databases │
│ • Slow decision making • Real-time analytics │
│ │
│ "Knowledge is power" "Data is shared" │
│ │
└─────────────────────────────────────────────────────────────────┘pythonfrom dataclasses import dataclass from enum import Enum from typing import List, Dict class ReadinessLevel(Enum): VULNERABLE = 1 # High disruption risk REACTIVE = 2 # Responding to change ADAPTIVE = 3 # Actively transforming LEADING = 4 # Driving change @dataclass class AssessmentDimension: name: str current_state: str target_state: str score: int # 1-10 actions: List[str] def assess_uberization_readiness(company_data: dict) -> dict: """Assess company readiness for industry disruption""" dimensions = [] # 1. Data Transparency dimensions.append(AssessmentDimension( name="Data Transparency", current_state=company_data.get("pricing_model", "opaque"), target_state="Transparent pricing with clear breakdowns", score=rate_transparency(company_data), actions=[ "Publish rate cards for standard work items", "Use CWICR codes for consistent pricing", "Provide detailed estimate breakdowns" ] )) # 2. Process Automation dimensions.append(AssessmentDimension( name="Process Automation", current_state=company_data.get("automation_level", "manual"), target_state="Automated workflows with minimal manual intervention", score=rate_automation(company_data), actions=[ "Implement ETL pipelines for data processing", "Automate daily reporting", "Deploy AI for document processing" ] )) # 3. Data Accessibility dimensions.append(AssessmentDimension( name="Data Accessibility", current_state=company_data.get("data_access", "siloed"), target_state="Real-time data access for all stakeholders", score=rate_accessibility(company_data), actions=[ "Deploy dashboards for clients", "Provide API access to project data", "Eliminate data silos" ] )) # 4. Performance Metrics dimensions.append(AssessmentDimension( name="Performance Tracking", current_state=company_data.get("kpi_tracking", "none"), target_state="Real-time KPIs with historical benchmarks", score=rate_performance(company_data), actions=[ "Track cost variance per project", "Measure schedule performance index", "Monitor quality metrics" ] )) # 5. Open Standards Adoption dimensions.append(AssessmentDimension( name="Open Standards", current_state=company_data.get("standards", "proprietary"), target_state="Full adoption of open data standards", score=rate_standards(company_data), actions=[ "Adopt IFC for BIM data exchange", "Use CWICR for work item classification", "Implement open APIs" ] )) # Calculate overall readiness total_score = sum(d.score for d in dimensions) max_score = len(dimensions) * 10 readiness_pct = (total_score / max_score) * 100 if readiness_pct < 30: level = ReadinessLevel.VULNERABLE elif readiness_pct < 50: level = ReadinessLevel.REACTIVE elif readiness_pct < 75: level = ReadinessLevel.ADAPTIVE else: level = ReadinessLevel.LEADING return { "dimensions": dimensions, "total_score": total_score, "max_score": max_score, "readiness_percentage": readiness_pct, "readiness_level": level.name, "risk_assessment": generate_risk_assessment(level, dimensions) }
pythonassessment_questions = [ # Data Transparency { "category": "Data Transparency", "question": "How are your project estimates presented to clients?", "options": { "Lump sum only": 1, "Cost categories without detail": 3, "Line item detail": 6, "Full transparency with unit rates": 10 } }, { "category": "Data Transparency", "question": "Can clients access project data in real-time?", "options": { "No access": 1, "Monthly reports": 3, "Weekly reports": 5, "Real-time dashboard": 10 } }, # Process Automation { "category": "Process Automation", "question": "How are daily reports generated?", "options": { "Manual writing": 1, "Template filling": 3, "Semi-automated": 6, "Fully automated": 10 } }, { "category": "Process Automation", "question": "How is estimate data created?", "options": { "Manual in Excel": 1, "Estimating software": 4, "BIM-linked QTO": 7, "AI-assisted automation": 10 } }, # Data Accessibility { "category": "Data Accessibility", "question": "How is project data stored?", "options": { "Local files": 1, "Shared drives": 3, "Cloud platform": 6, "Integrated database with API": 10 } }, # Open Standards { "category": "Open Standards", "question": "What work classification system do you use?", "options": { "Internal codes only": 1, "CSI MasterFormat": 5, "Open standard (CWICR, Uniclass)": 8, "Multiple standards with mapping": 10 } } ]
pythondef analyze_competitive_threats(market_data: dict) -> dict: """Analyze threats from open data platforms""" threats = [] # Threat 1: Price transparency platforms if market_data.get("price_platforms_active"): threats.append({ "threat": "Price Comparison Platforms", "description": "Platforms like OpenEstimate allow clients to compare contractor rates", "impact": "HIGH", "response": "Compete on value and transparency, not information asymmetry" }) # Threat 2: Performance rating systems threats.append({ "threat": "Performance Ratings", "description": "Public contractor ratings based on cost, schedule, quality", "impact": "MEDIUM", "response": "Proactively track and publish your own performance metrics" }) # Threat 3: AI estimation tools threats.append({ "threat": "AI Estimation", "description": "Clients can generate estimates without contractors", "impact": "HIGH", "response": "Add value beyond estimation: execution expertise, risk management" }) # Threat 4: Direct material sourcing threats.append({ "threat": "Material Marketplaces", "description": "Open material pricing eliminates markup opacity", "impact": "MEDIUM", "response": "Provide transparent cost-plus pricing" }) return { "threats": threats, "overall_risk": calculate_overall_risk(threats), "time_to_impact": "3-5 years", "recommended_actions": generate_action_plan(threats) }
Year 1: Foundation
├── Adopt open work classification (CWICR)
├── Implement data centralization
├── Deploy basic automation (daily reports)
└── Start tracking KPIs
Year 2: Automation
├── Deploy AI document processing
├── Automate estimation workflows
├── Build client dashboards
└── Integrate systems (BIM → ERP → PM)
Year 3: Transparency
├── Publish performance metrics
├── Provide real-time project access
├── Open API for integrations
└── Transparent pricing models
Year 4+: Leadership
├── Contribute to open data initiatives
├── Build platform capabilities
├── Lead industry transformation
└── Monetize data insightspythondef generate_readiness_report(assessment: dict) -> str: """Generate executive summary report""" report = f""" # Uberization Readiness Report ## Overall Assessment - **Readiness Level:** {assessment['readiness_level']} - **Score:** {assessment['total_score']}/{assessment['max_score']} ({assessment['readiness_percentage']:.0f}%) ## Risk Assessment {assessment['risk_assessment']} ## Dimension Scores | Dimension | Score | Status | |-----------|-------|--------| """ for dim in assessment['dimensions']: status = "🟢" if dim.score >= 7 else "🟡" if dim.score >= 4 else "🔴" report += f"| {dim.name} | {dim.score}/10 | {status} |\n" report += """ ## Recommended Actions ### Immediate (0-6 months) """ for dim in assessment['dimensions']: if dim.score < 5: report += f"\n**{dim.name}:**\n" for action in dim.actions[:2]: report += f"- {action}\n" return report
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-03 | fail→pass | 13,529 | 8,874 | -34% | 1 | 1 | 0% | 2,186 | 4,118 | +88% | 0 | 0 | — |
case-01 | fail→pass | 17,859 | 13,590 | -24% | 1 | 1 | 0% | 3,095 | 5,023 | +62% | 0 | 0 | — |
case-02 | fail→pass | 27,467 | 28,331 | +3% | 1 | 1 | 0% | 4,302 | 7,169 | +67% | 0 | 0 | — |
case-04 | pass→pass | 8,567 | 10,470 | +22% | 1 | 1 | 0% | 1,765 | 4,738 | +168% | 0 | 0 | — |
case-05 | pass→pass | 19,398 | 32,608 | +68% | 1 | 1 | 0% | 3,439 | 8,190 | +138% | 0 | 0 | — |
case-06 | pass→pass | 19,885 | 20,200 | +2% | 1 | 1 | 0% | 3,356 | 6,086 | +81% | 0 | 0 | — |
case-07 | pass→pass | 12,007 | 5,574 | -54% | 1 | 1 | 0% | 1,921 | 3,487 | +82% | 0 | 0 | — |
case-08 | fail→pass | 9,105 | 3,541 | -61% | 1 | 1 | 0% | 1,480 | 3,173 | +114% | 0 | 0 | — |
case-09 | fail→pass | 9,562 | 2,825 | -70% | 1 | 1 | 0% | 1,637 | 3,087 | +89% | 0 | 0 | — |
case-10 | fail→pass | 11,742 | 2,661 | -77% | 1 | 1 | 0% | 2,096 | 3,042 | +45% | 0 | 0 | — |
case-11 | fail→pass | 10,843 | 8,452 | -22% | 1 | 1 | 0% | 1,605 | 3,932 | +145% | 0 | 0 | — |
case-12 | pass→pass | 9,699 | 2,916 | -70% | 1 | 1 | 0% | 1,574 | 3,115 | +98% | 0 | 0 | — |
case-13 | fail→pass | 4,837 | 1,979 | -59% | 1 | 1 | 0% | 688 | 2,915 | +324% | 0 | 0 | — |
case-14 | fail→pass | 6,433 | 2,336 | -64% | 1 | 1 | 0% | 990 | 2,982 | +201% | 0 | 0 | — |
case-15 | pass→pass | 8,555 | 2,217 | -74% | 1 | 1 | 0% | 1,398 | 2,973 | +113% | 0 | 0 | — |
case-16 | fail→pass | 8,938 | 2,751 | -69% | 1 | 1 | 0% | 1,501 | 3,034 | +102% | 0 | 0 | — |
case-17 | pass→pass | 10,663 | 2,615 | -75% | 1 | 1 | 0% | 1,682 | 3,033 | +80% | 0 | 0 | — |
case-18 | pass→pass | 12,126 | 7,053 | -42% | 1 | 1 | 0% | 1,806 | 3,726 | +106% | 0 | 0 | — |
case-19 | pass→pass | 14,928 | 14,136 | -5% | 1 | 1 | 0% | 2,104 | 4,611 | +119% | 0 | 0 | — |
case-20 | pass→pass | 9,488 | 2,663 | -72% | 1 | 1 | 0% | 1,499 | 2,989 | +99% | 0 | 0 | — |
case-21 | fail→pass | 8,096 | 2,619 | -68% | 1 | 1 | 0% | 1,354 | 3,040 | +125% | 0 | 0 | — |
case-22 | fail→pass | 12,754 | 13,024 | +2% | 1 | 1 | 0% | 2,134 | 4,735 | +122% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted. The headline lift of +55 percentage points is the difference between those two pass rates over the 22 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.