Technical Project Management
Project management for software projects has different dynamics than construction or manufacturing. Software work has more uncertainty, more knowledge work, more rework. The PM frameworks imported from non-software (Gantt charts, fixed scope and date, etc.) often fit poorly.
This page covers the practices that work for software projects.
What software projects need
Software project management isn't generic project management. Specific features:
High uncertainty in early estimates
Software estimates are notoriously bad early; they get better as work progresses. Plans should accommodate this — fixed estimates with no revision are fictional.
Discovery during execution
Real requirements emerge as the work proceeds. A "complete" spec at project start has misunderstandings; finding them is part of the work.
Quality work that doesn't show
Engineers spend significant time on testing, refactoring, debugging — work that doesn't appear in feature lists. PMs who ignore this end up with technical debt.
Knowledge concentrated in heads
The team's knowledge of the system isn't fully captured in documents. Losing a key engineer mid-project changes everything.
The role
In software, "technical project manager" means many things:
Engineer-with-PM-skills
A senior engineer who runs the project alongside coding. Common pattern; the PM understands the technical work because they're doing it.
Dedicated PM
Someone whose primary job is coordination, not engineering. Useful for large projects with many stakeholders.
Engineering manager doubling as PM
The line manager handles project coordination. Common in startups.
The right setup depends on team size, project complexity, and organizational culture. Larger and more complex usually justifies a dedicated PM.
Estimation
The hard problem.
Why estimates are bad
- Engineers underestimate by default (optimism bias)
- Unknown unknowns dominate large projects
- Translation issues with non-engineers (one estimate becomes a commitment)
What helps
- **Estimate at the right granularity**: 1-3 day chunks. Smaller is more accurate; larger is too vague.
- **Track actuals**: estimate, finish, compare. Calibrate over time.
- **Use ranges, not points**: "5-10 days" is more honest than "7 days"
- **Budget for unknowns**: explicit slack in the plan
- **Re-plan as you learn**: not a failure; it's how software works
The trap of "just commit"
Stakeholders want commitments. Treating estimates as commitments without acknowledging uncertainty leads to:
- Padded estimates that nobody believes
- Or thin estimates that miss
- Either way, trust erodes
The honest approach: explicit confidence levels and ranges. "We're 80% confident in 4-6 weeks" beats "5 weeks."
Sequencing
Critical path
The longest dependent chain of work. Determines the minimum time. Identify the critical path; protect it.
Parallelize where possible
Independent work streams happen in parallel. Reduces total time even if individual streams are unchanged.
Risk-first
Tackle the highest-risk work first. Discoveries that invalidate the project should happen early, not at the end.
This is counter-intuitive — engineers often prefer easy work first to "build momentum." But postponing risk costs more than starting with it.
Demos and milestones
Visible progress every 1-2 weeks. Stakeholders see real work; team sees progress. Long stretches without visible progress destroy confidence.
Status communication
The PM's communication work:
Internal status
Team knows where things stand. Standup, written updates, dashboards. Don't manage by surprise.
Stakeholder status
External communication translated to non-engineering language. Focus on:
- What's done
- What's in progress
- Risks
- Decisions needed
- Timeline
Avoid technical detail at the wrong level. "We refactored the persistence layer" means nothing to a stakeholder; "the order service is 30% faster" does.
Bad-news fast
When things go wrong, communicate immediately. Hidden bad news compounds; revealed bad news is uncomfortable but actionable.
Specific tools
Tickets / issues
Jira, Linear, GitHub Issues. Useful for tracking; harmful if they become the work itself.
Roadmaps
Quarterly or annual. Direction without commitment. Useful for visibility; harmful if treated as commitment.
Gantt charts
Sometimes useful; usually false precision in software. The honest version shows uncertainty (wide bars, ranges).
Standups
Daily or every other day. Coordination, not status reports. If standup runs long, it's the wrong format.
Retrospectives
After phases or projects. What worked, what didn't, what to change. Genuine improvement requires actual changes, not just recording.
When projects go wrong
Behind schedule
Three options:
- Add scope reduction
- Add resources (rarely helps; "Mythical Man-Month")
- Slip the date
Pretending the date is achievable when it isn't is the worst option.
Scope creep
New requirements during execution. Either:
- Cut existing scope
- Slip the date
- Add resources for the new scope
The "fit it in" option is usually fiction.
Stuck on hard problem
Sometimes a project hits a problem nobody anticipated. Options:
- Spend the time to solve it
- Replace the approach
- Reduce scope to avoid it
PMs need to recognize this case and not let the project drift while engineers struggle silently.
Common failure patterns
- **Treating estimates as commitments.** Trust erodes when estimates miss.
- **No visibility on risks.** Discovered too late.
- **Too much process.** Team spends time on PM rituals instead of work.
- **Too little process.** Surprises everywhere.
- **Stakeholders managed via surprise.** Trust destroyed.
- **Long projects with no demos.** Loss of confidence.
Further Reading
- [TechnicalLeadershipSkills](TechnicalLeadershipSkills) — Adjacent role
- [EngineeringDecisionFrameworks](EngineeringDecisionFrameworks) — Decisions during projects
- [RemoteTeamManagement](RemoteTeamManagement) — Remote-specific concerns
- [TechnicalWritingGuide](TechnicalWritingGuide) — Status documents
- [EngineeringLeadership Hub](EngineeringLeadershipHub) — Cluster index