|
| 1 | +# MS Project vs utf8proj Feature Comparison |
| 2 | + |
| 3 | +This document compares Microsoft Project features with utf8proj support, identifying gaps and conversion considerations. |
| 4 | + |
| 5 | +## Summary |
| 6 | + |
| 7 | +| Category | MS Project Features | utf8proj Support | Gap | |
| 8 | +|----------|---------------------|------------------|-----| |
| 9 | +| Core Scheduling | 12 | 11 | 1 (Resource calendar priority) | |
| 10 | +| Task Attributes | 15 | 14 | 1 (Physical % complete) | |
| 11 | +| Dependencies | 6 | 6 | ✓ Full support | |
| 12 | +| Resources | 10 | 8 | 2 (Cost resources, Material resources) | |
| 13 | +| Progress Tracking | 8 | 7 | 1 (Physical % complete) | |
| 14 | +| Cost Management | 6 | 4 | 2 (Earned value types) | |
| 15 | +| Constraints | 8 | 6 | ✓ Full support (mapped) | |
| 16 | + |
| 17 | +## Core Scheduling Concepts |
| 18 | + |
| 19 | +| Concept | MS Project | utf8proj | Status | |
| 20 | +|---------|------------|----------|--------| |
| 21 | +| Forward pass (CPM) | ✓ | ✓ | ✅ Full | |
| 22 | +| Backward pass (CPM) | ✓ | ✓ | ✅ Full | |
| 23 | +| Critical path | ✓ | ✓ | ✅ Full | |
| 24 | +| Effort-driven scheduling | ✓ | ✓ | ✅ Full (PMI compliant) | |
| 25 | +| Fixed duration | ✓ | ✓ `duration:` | ✅ Full | |
| 26 | +| Fixed work | ✓ | ✓ `effort:` | ✅ Full | |
| 27 | +| Fixed units | ✓ | ✓ `assign: dev@50%` | ✅ Full | |
| 28 | +| Auto-scheduled | ✓ | ✓ (default) | ✅ Full | |
| 29 | +| Manually scheduled | ✓ | ✓ `must_start_on:` | ✅ Full (via constraint) | |
| 30 | +| Summary tasks (containers) | ✓ | ✓ Hierarchical | ✅ Full | |
| 31 | +| Milestones | ✓ | ✓ `milestone id {}` | ✅ Full | |
| 32 | +| Resource calendars | ✓ | ✓ `calendar:` | ✅ Partial | |
| 33 | + |
| 34 | +### Notes |
| 35 | +- **Manually scheduled tasks**: Converted to `must_start_on:` constraints by mpp_to_proj |
| 36 | +- **Resource calendar priority**: MS Project uses most restrictive calendar; utf8proj uses task calendar |
| 37 | + |
| 38 | +## Task Attributes |
| 39 | + |
| 40 | +| Attribute | MS Project | utf8proj | Status | |
| 41 | +|-----------|------------|----------|--------| |
| 42 | +| Name | ✓ | ✓ `"Display Name"` | ✅ Full | |
| 43 | +| ID/WBS | ✓ | ✓ `task_id` | ✅ Full | |
| 44 | +| Duration | ✓ | ✓ `duration:` | ✅ Full | |
| 45 | +| Work (Effort) | ✓ | ✓ `effort:` | ✅ Full | |
| 46 | +| Start/Finish | ✓ (computed) | ✓ (computed) | ✅ Full | |
| 47 | +| % Complete | ✓ | ✓ `complete:` | ✅ Full | |
| 48 | +| Physical % Complete | ✓ | ❌ | ⚠️ Gap | |
| 49 | +| Remaining Duration | ✓ | ✓ `remaining:` | ✅ Full | |
| 50 | +| Priority | ✓ (1-1000) | ✓ `priority:` (integer) | ✅ Full | |
| 51 | +| Notes | ✓ | ✓ `note:` | ✅ Full | |
| 52 | +| Constraint Type | ✓ | ✓ (see Constraints) | ✅ Full | |
| 53 | +| Constraint Date | ✓ | ✓ (see Constraints) | ✅ Full | |
| 54 | +| Deadline | ✓ | ✓ `finish_no_later_than:` | ✅ Full | |
| 55 | +| Cost | ✓ | ✓ `cost:` (fixed) | ✅ Partial | |
| 56 | +| Actual Start/Finish | ✓ | ✓ `actual_start:`, `actual_finish:` | ✅ Full | |
| 57 | + |
| 58 | +### Notes |
| 59 | +- **Physical % Complete**: Used for earned value; utf8proj uses duration-based % |
| 60 | + |
| 61 | +## Dependencies |
| 62 | + |
| 63 | +| Type | MS Project | utf8proj | Status | |
| 64 | +|------|------------|----------|--------| |
| 65 | +| Finish-to-Start (FS) | ✓ | ✓ `depends: task` | ✅ Full | |
| 66 | +| Start-to-Start (SS) | ✓ | ✓ `depends: task SS` | ✅ Full | |
| 67 | +| Finish-to-Finish (FF) | ✓ | ✓ `depends: task FF` | ✅ Full | |
| 68 | +| Start-to-Finish (SF) | ✓ | ✓ `depends: task SF` | ✅ Full | |
| 69 | +| Lag (positive) | ✓ | ✓ `depends: task +5d` | ✅ Full | |
| 70 | +| Lead (negative lag) | ✓ | ✓ `depends: task -2d` | ✅ Full | |
| 71 | + |
| 72 | +### Container Dependency Inheritance |
| 73 | +- **MS Project**: Child tasks implicitly inherit container dependencies |
| 74 | +- **utf8proj**: Explicit dependencies only (use `fix container-deps` command) |
| 75 | +- **W014 diagnostic** warns about this difference |
| 76 | + |
| 77 | +## Resources |
| 78 | + |
| 79 | +| Feature | MS Project | utf8proj | Status | |
| 80 | +|---------|------------|----------|--------| |
| 81 | +| Work resources | ✓ | ✓ `resource id {}` | ✅ Full | |
| 82 | +| Material resources | ✓ | ❌ | ⚠️ Gap | |
| 83 | +| Cost resources | ✓ | ❌ | ⚠️ Gap | |
| 84 | +| Standard rate | ✓ | ✓ `rate: 500/day` | ✅ Full | |
| 85 | +| Overtime rate | ✓ | ❌ (not implemented) | ⚠️ Gap | |
| 86 | +| Cost per use | ✓ | ❌ | ⚠️ Gap | |
| 87 | +| Capacity/Max units | ✓ | ✓ `capacity:` | ✅ Full | |
| 88 | +| Calendar | ✓ | ✓ `calendar:` | ✅ Full | |
| 89 | +| Availability | ✓ | ✓ `availability:` | ✅ Full | |
| 90 | +| Efficiency | ✓ (calculated) | ✓ `efficiency:` | ✅ Full | |
| 91 | +| Leave/Vacation | ✓ | ✓ `leave: date..date` | ✅ Full | |
| 92 | + |
| 93 | +### Notes |
| 94 | +- **Work resources**: Fully supported (people, equipment) |
| 95 | +- **Material resources**: Not tracked (consumables like concrete, steel) |
| 96 | +- **Cost resources**: Not tracked (expenses like travel, licenses) |
| 97 | + |
| 98 | +## Progress Tracking |
| 99 | + |
| 100 | +| Feature | MS Project | utf8proj | Status | |
| 101 | +|---------|------------|----------|--------| |
| 102 | +| % Complete | ✓ | ✓ `complete: 50%` | ✅ Full | |
| 103 | +| Physical % Complete | ✓ | ❌ | ⚠️ Gap | |
| 104 | +| Status Date | ✓ | ✓ `status_date:` | ✅ Full | |
| 105 | +| Actual Start | ✓ | ✓ `actual_start:` | ✅ Full | |
| 106 | +| Actual Finish | ✓ | ✓ `actual_finish:` | ✅ Full | |
| 107 | +| Remaining Work | ✓ | ✓ `remaining:` | ✅ Full | |
| 108 | +| Remaining Duration | ✓ | ✓ (computed) | ✅ Full | |
| 109 | +| Task Status | ✓ | ✓ `status: in_progress` | ✅ Full | |
| 110 | + |
| 111 | +### Notes |
| 112 | +- **Status Date**: RFC-0008 progress-aware scheduling respects status date |
| 113 | +- **P005/P006 diagnostics** warn about progress inconsistencies |
| 114 | + |
| 115 | +## Constraints |
| 116 | + |
| 117 | +| MS Project Constraint | utf8proj Equivalent | Status | |
| 118 | +|----------------------|---------------------|--------| |
| 119 | +| As Soon As Possible | (default) | ✅ Full | |
| 120 | +| As Late As Possible | ❌ | ⚠️ Gap | |
| 121 | +| Must Start On | `must_start_on:` | ✅ Full | |
| 122 | +| Must Finish On | `must_finish_on:` | ✅ Full | |
| 123 | +| Start No Earlier Than | `start_no_earlier_than:` | ✅ Full | |
| 124 | +| Start No Later Than | `start_no_later_than:` | ✅ Full | |
| 125 | +| Finish No Earlier Than | `finish_no_earlier_than:` | ✅ Full | |
| 126 | +| Finish No Later Than | `finish_no_later_than:` | ✅ Full | |
| 127 | + |
| 128 | +### Notes |
| 129 | +- **As Late As Possible**: Not directly supported; use `finish_no_later_than:` as workaround |
| 130 | + |
| 131 | +## Cost Management |
| 132 | + |
| 133 | +| Feature | MS Project | utf8proj | Status | |
| 134 | +|---------|------------|----------|--------| |
| 135 | +| Resource costs | ✓ | ✓ `rate: 500/day` | ✅ Full | |
| 136 | +| Fixed costs | ✓ | ✓ `cost:` | ✅ Full | |
| 137 | +| Actual costs | ✓ | ❌ | ⚠️ Gap | |
| 138 | +| Cost variance | ✓ | ❌ | ⚠️ Gap | |
| 139 | +| Budget | ✓ | ❌ | ⚠️ Gap | |
| 140 | +| Milestone payments | ✓ | ✓ `payment:` | ✅ Full | |
| 141 | + |
| 142 | +## Earned Value Management |
| 143 | + |
| 144 | +| Metric | MS Project | utf8proj | Status | |
| 145 | +|--------|------------|----------|--------| |
| 146 | +| BCWS (PV) | ✓ | ✓ (computed) | ✅ Full | |
| 147 | +| BCWP (EV) | ✓ | ✓ (computed) | ✅ Full | |
| 148 | +| ACWP (AC) | ✓ | ❌ | ⚠️ Gap | |
| 149 | +| SPI | ✓ | ✓ (I005) | ✅ Full | |
| 150 | +| CPI | ✓ | ❌ | ⚠️ Gap | |
| 151 | +| SV | ✓ | ✓ (computed) | ✅ Full | |
| 152 | +| CV | ✓ | ❌ | ⚠️ Gap | |
| 153 | + |
| 154 | +### Notes |
| 155 | +- **Earned Value**: utf8proj computes schedule performance; cost performance requires actual costs |
| 156 | + |
| 157 | +## Temporal Regimes (RFC-0012) |
| 158 | + |
| 159 | +utf8proj extends MS Project with explicit temporal regimes: |
| 160 | + |
| 161 | +| Regime | Description | Use Case | |
| 162 | +|--------|-------------|----------| |
| 163 | +| `work` | Respects working days (default) | Effort-bearing tasks | |
| 164 | +| `event` | Any calendar day | Releases, launches, go-lives | |
| 165 | +| `deadline` | Exact date required | Contractual, regulatory dates | |
| 166 | + |
| 167 | +This allows scheduling events on weekends when business constraints require it. |
| 168 | + |
| 169 | +## Conversion Workflow (mpp_to_proj) |
| 170 | + |
| 171 | +### Handled Automatically |
| 172 | +- Task hierarchy and WBS |
| 173 | +- Duration and effort |
| 174 | +- All dependency types (FS, SS, FF, SF) with lag |
| 175 | +- Resource assignments |
| 176 | +- Constraints |
| 177 | +- Milestones |
| 178 | +- **Manually scheduled tasks** → `must_start_on:` constraints |
| 179 | + |
| 180 | +### Post-Conversion Steps |
| 181 | +1. Run `utf8proj check` to see diagnostics |
| 182 | +2. Run `utf8proj fix container-deps` to inherit container dependencies |
| 183 | +3. Review W014 warnings for dependency differences |
| 184 | +4. Add `regime: event` to milestones that should ignore calendars |
| 185 | + |
| 186 | +### Example Workflow |
| 187 | +```bash |
| 188 | +# Convert |
| 189 | +python3 tools/mpp_to_proj/mpp_to_proj.py project.mpp project.proj |
| 190 | + |
| 191 | +# Check and fix |
| 192 | +utf8proj check project.proj |
| 193 | +utf8proj fix container-deps project.proj -o project_fixed.proj |
| 194 | + |
| 195 | +# Schedule |
| 196 | +utf8proj schedule project_fixed.proj |
| 197 | +``` |
| 198 | + |
| 199 | +## Validation: PaaS Azure Project |
| 200 | + |
| 201 | +| Metric | MS Project | utf8proj | Match | |
| 202 | +|--------|------------|----------|-------| |
| 203 | +| Start Date | 2019-09-24 | 2019-09-24 | ✅ | |
| 204 | +| End Date | 2020-01-10 | 2020-01-10 | ✅ | |
| 205 | +| Task Count | 28 | 28 | ✅ | |
| 206 | +| Milestones | 4 | 4 | ✅ | |
| 207 | +| Start QA milestone | 2019-10-15 | 2019-10-15 | ✅ | |
| 208 | +| Start PROD milestone | 2019-12-01 | 2019-12-01 | ✅ | |
| 209 | +| Go Live | 2020-01-10 | 2020-01-10 | ✅ | |
| 210 | + |
| 211 | +## Conclusion |
| 212 | + |
| 213 | +utf8proj provides **comprehensive coverage** of MS Project's core scheduling features: |
| 214 | +- ✅ CPM scheduling with all dependency types |
| 215 | +- ✅ Effort-driven scheduling (PMI compliant) |
| 216 | +- ✅ Progress tracking with status date |
| 217 | +- ✅ Earned value (schedule performance) |
| 218 | +- ✅ Resource management and leveling |
| 219 | + |
| 220 | +**Gaps** are primarily in advanced cost tracking: |
| 221 | +- Material and cost resources |
| 222 | +- Actual cost tracking |
| 223 | +- Cost performance metrics (CPI, CV) |
| 224 | + |
| 225 | +For most project planning and schedule management use cases, utf8proj is a **complete, trustworthy tool** that can accurately reproduce MS Project schedules. |
0 commit comments