- 개발자의 기술력은 믿지만, 일정 예측 능력은 믿을 수 없습니다.
- 프로젝트를 진행하다 보면 항상 예상치 못한 일이 발생합니다.
- 프로젝트가 막바지로 가면, 특히 통합과정에서의 혼란을 개발자들은 쉽게 생각하는 경향이 있습니다.
- 과거의 경험으로 보면 예상된 일정보다 빨리 끝난 프로젝트는 거의 없었습니다.
2008년 12월 16일 화요일
하루 8시간 일하시나요?
2011년 7월 27일 수요일
90%에서 끝나지 않는 프로젝트
그 중 대부분의 프로젝트는 90%까지는 진도가 착착 잘 나가는데 10%를 남기고 나서 일정이 계속 지연되곤 한다. 남은 10%를 끝내기 위해서 90% 끝내는데 걸리는 시간보다 더 오래 걸리는 프로젝트를 보는 것은 그리 쉬운 일이 아니다. 설령 일정에 밀려서 출시를 해도 버그가 많은 알파버전 수준의 제품을 출시해서 고객들의 원성을 사기 일쑤이다.
경영자는 매달 개발자들이 하는 다음달이면 끝난다는 얘기를 반복해서 듣게 된다.
이러한 상황을 개발자들은 그렇게 심각하게 보지 않는 경우가 많다. 하지만 비즈니스를 하는 사람은 이것이 비즈니스를 하는데 얼마나 심각한 문제가 되는지 잘 알고 있다.
소프트웨어 공학은 프로젝트 일정을 단축하고 계획대로 개발할 수 있도록 하기 위한 방법에 온 힘을 기울여 왔다. 소프트웨어 공학에서 다루는 거의 모든 분야는 일정 준수에 포커스를 하고 있다고 해도 과언이 아니다.
남은 10%의 일정이 그렇게 잘 안끝나는 주요 원인들은 다음과 같은 것들이 있다.
- 스펙을 충분히 제대로 작성하지 않았다. 단순한 요구사항을 가지고 개발자들이 알아서 개발을 한다.
- 설계가 허술해서 인터페이스가 자주 바뀐다. 통합이 잘 안되서 통합하는데 시간이 많이 소요된다.
- 상세 일정이 없이 큰 단위의 마일스톤만 가지고 있다. 일정관리는 거의 안한다.
- 리스크 관리는 해본적도 없다.
- 제품이 개발되기 전까지 스펙이 공유가 안되서 영업이나 경영층에서 프로젝트 막바지에 제품의 모습을 보고 요구사항을 계속 추가로 요청한다.
- 프로젝트 일정에 테스트 일정을 충분히 고려하지 않았다. 테스트 케이스를 제대로 만들지 않고 테스트 인력이 부족해서 테스트 할 때마다 계속 새로운 버그가 발견되서 끝나지를 않는다.
프로젝트 일정은 10%가 남았다면 진짜로 10%만 더 지나면 끝나야 한다.
2011년 1월 31일 월요일
이번 프로젝트 내일 끝나?
2011년 2월 16일 수요일
경영진이 너무 촉박한 일정을 제시합니다.
- 매일 밤새면서 일했는데 못 지켰습니다. 원래 불가능한 일정이었어요.
- 코딩은 끝났는데, 테스트는 못했습니다.
2012년 11월 5일 월요일
내가 책임지고 해보겠습니다.
2008년 12월 8일 월요일
오늘도 밤을 세워야 하는 개발자 (야근 탈출)
- 정확한 일정 예측
- 체계적인 개발 방법
- 합리적인 일정 복구
2019년 12월 26일 목요일
[Software Spec Series 2] 소프트웨어 프로젝트 실패의 원인
- 약속된 일정 내에 제품 또는 서비스를 출시하지 못했다.
- 소프트웨어가 요구되는 품질을 충족하지 못했다. (기능 요구사항, 성능, 안정성, 사용성, 확장성 등)
- 프로젝트에 꼭 필요한 기술 개발에 실패했다.
- 아키텍처가 엉망진창이 되어서 유지보수가 어렵게 됐다.
- 프로젝트에 계획된 예산보다 많은 비용을 지출했다.
- 프로젝트 내내 야근을 거듭하여 조직의 사기가 떨어지고 퇴사자가 많이 발생했다.
- 고객의 요구사항을 충분히 파악하지 못했다.
- 제품의 방향을 빨리 정하지 못하고 우왕좌왕하면서 프로젝트 앞부분에서 상당히 많은 시간을 소모하여 정작 개발 기간이 부족하게 되었다.
- 스펙과 설계를 제대로 작성하지 않고 코딩을 시작해서 엉뚱한 방향으로 개발을 하였다.
- 작성된 스펙을 프로젝트 이해관계자들이 충분히 리뷰 하지 않아 잘못된 스펙으로 개발하였다.
- 프로젝트를 진행할수록 새로운 요구사항이 계속 발견되어서 프로젝트가 한없이 늘어졌다.
- 변경된 요구사항을 제대로 관리하지 않아서 프로젝트 팀원들이 서로 다른 기준으로 개발을 하였다.
- 상명하복식으로 지정된 출시 일정을 맞추기 위해서 급하게 코딩부터 시작했다. 나중에 잘못된 코드를 고치느라고 시간이 더 소요되었다.
- 충분히 훈련되지 않은 개발자들을 투입하여 초반에 우왕좌왕하느라고 시간을 많이 지체했다.
- 일정관리를 대충해서 프로젝트가 지연되고 있다는 징후를 눈치채지 못했다.
- 리스크 관리를 하지 않아서 리스크로 인해서 프로젝트를 실패했다.
- 프로젝트 막판에 경영진이나 주요 고객이 프로젝트 방향을 완전히 틀어서 거의 처음부터 다시 개발해야 했다.
- 프로젝트 팀원들의 팀워크에 문제가 있어서 지속적으로 불화가 발생하여 프로젝트가 산으로 갔다.
- 도입한 외부 필수 기술이 기대처럼 동작하지 않았다. 이것을 프로젝트 막바지에 알게 되었다.
- 테스트 팀에 제대로 된 스펙을 전달하지 못해서 테스트 준비를 제대로 하지 못했다.
- 회사의 표준 프로세스를 강요하여 문서를 너무 많이 만들다 보니 정작 개발에는 소홀해졌다.
이외에도 실패 원인은 끝도 없이 많을 것이다. 이를 분류해보면 스펙, 프로젝트팀, 프로젝트 관리, 고객, 기술 등 다양하다. 필자는 이중에서 가장 중요하게 생각하는 요인은 “스펙”이다. 가장 많은 원인이 스펙과 관련이 있다. 또한 소프트웨어 버그의 절반 이상은 스펙으로부터 발생한다고 알려져 있다.
프로젝트가 아주 작다면 스펙을 제대로 적지 않고 요구사항 몇 줄로 개발해 나가도 소프트웨어를 무사히 완성하기도 한다. 소수의 경험 많은 개발자가 개발을 주도하는 경우 요구사항을 대충 알려줘도 찰떡 같이 알아듣고 개발을 잘하기도 한다. 하지만, 수백명이 투입되는 대규모 프로젝트에서는 매우 잘 정리된 스펙 문서가 필요한 경우가 일반적이다. 외국에 외주를 줄 경우 자세히 적힌 스펙 문서와 인수 테스트 계획이 필요하다.
소규모 프로젝트에서의 성공 경험을 대규모 프로젝트에 적용해서 실패를 하기도 하고, 반대로 대규모 프로젝트의 방법론이 중소규모 프로젝트에서 실패의 원인이 되기도 한다.
요구사항이 누락되거나 충분히 분석이 안된 스펙도 문제지만 너무 자세히 적거나 많은 문서를 적는 것도 문제가 된다. 대규모 방법론을 따르는 회사에서는 이런 함정에 종종 빠진다. 개발은 문서대로 진행되지 않을 뿐만 아니라 문서가 너무 많아서 수시로 바뀌는 요구사항을 문서에 제대로 반영하지 못한다.
따라서 엄격한 프로세스로 규제를 하는 것도 어렵다. 자율에 맡겨도 쉽지 않다. 필자가 생각하는 가장 좋은 방법은 원칙만 지킬 수 있는 최소한의 프로세스가 있는 환경에서 좋은 문화를 가지는 것이다. 빨리빨리 문화를 지양하고 적절히 분석하고 설계를 한 후 프로젝트를 진행하는 것이 더 빠르다는 인식을 공유해야 한다. 실제로 가장 빠른 방법이다. 모든 이해관계자들이 스펙을 철저히 리뷰하고 쉽게 요구사항을 바꾸지 않아야 한다. 이런 문화와 관행을 만들어가는 것이 프로세스보다 더 중요하다. 그래야 회사에 역량이 축적된다. 그렇게 좋은 문화와 축적된 역량이 충분해야 어떠한 프로젝트라도 성공으로 이끌 수 있다.
좋은 환경이 있어도 스펙을 제대로 적을 수 있는 역량이 부족하다면 소프트웨어 프로젝트 성공은 어렵다. 스펙을 제대로 적는 역량은 소프트웨어를 개발하는데 있어서 가장 어려운 역량이며 소질이 있는 개발자도 제대로 하려면 10년 이상의 경험과 노력이 필요하다. 꾸준히 투자하는 방법 외에 기가 막힌 방법은 없다.
share with abctech.software
2017년 8월 9일 수요일
소프트웨어 프로젝트는 왜 실패하는가?
- 약속된 일정 내에 제품 또는 서비스를 출시 못했다.
- 소프트웨어가 시장에서 요구되는 품질을 충족하지 못했다. (요구사항, 성능, 안정성, 사용성 등)
- 프로젝트에 꼭 필요한 기술 개발에 실패했다.
- 아키텍처가 엉망진창이 되어서 유지보수가 어렵게 됐다.
- 프로젝트에 계획된 예산보다 많은 비용을 지출했다.
- 프로젝트 내내 야근을 거듭하여 조직의 사기가 떨어지고 퇴사자가 많이 발생했다.
- 고객의 요구사항을 충분히 파악하지 못함
- 제품의 방향을 빨리 정하지 못하고 우왕좌왕하면서 프로젝트 앞부분에서 상당부분의 시간을 소모하여 개발 기간이 부족하게 됨
- 스펙/설계를 제대로 작성하지 않고 코딩을 시작해서 엉뚱한 방향으로 개발을 함
- 작성된 스펙을 관련자들이 충분히 리뷰 하지 않아 잘못된 스펙으로 개발함
- 프로젝트를 진행할수록 새로운 요구사항이 계속 발견되어서 프로젝트가 한없이 늘어짐
- 변경된 요구사항을 제대로 관리하지 않아서 프로젝트 팀원들이 서로 다른 기준으로 개발을 함
- 상명하복식으로 지정된 출시 일정을 맞추기 위해서 급하게 코딩부터 시작함. 나중에 잘못된 코드를 고치느라고 시간이 더 소요됨
- 충분히 훈련되지 않은 개발자들을 투입하여 초반에 우왕좌왕함
- 일정관리를 대충 해서 프로젝트가 지연되고 있다는 징후를 눈치채지 못함
- 리스크 관리를 하지 않아서 리스크로 인해서 프로젝트를 실패함
- 프로젝트 막판에 경영진이나 주요 고객이 프로젝트 방향을 완전히 틀어서 거의 처음부터 다시 개발해야 함
- 프로젝트 팀원들의 팀웍에 문제가 있어서 지속적으로 불화가 발생하여 프로젝트는 산으로 감
- 도입한 외부 필수 기술이 기대처럼 동작하지 않는다.
- 테스트 팀에 제대로 된 스펙을 전달하지 못해서 테스트 준비를 제대로 하지 못함
- 회사의 표준 프로세스를 강요하여 문서를 너무 많이 만들다 보니 정작 개발에는 소홀해짐
share with abctech.software
2026년 1월 7일 수요일
AI와 머신러닝으로 일정 예측하기: 추측이 아닌 과학으로
"프로젝트가 3개월이 걸릴 거야"
이 예측이 맞을 확률은 얼마나 될까요?
통계를 보면 암담합니다.
전통적 추정은 45-55%, 경험 기반 추정도 55-65% 정도의 정확도를 보입니다.
동전 던지기보다 조금 나은 수준이죠.
그런데 AI/ML 기반 예측은 75-85%의 정확도를 보입니다.
어떻게 가능할까요?
머신러닝은 수백, 수천 개의 과거 프로젝트 데이터에서 인간이 놓치는 패턴을 찾아냅니다.
팀 규모가 7명일 때 생산성이 떨어진다거나,
3월에 시작한 프로젝트가 더 지연된다거나 하는 미묘한 패턴들 말이죠.
처음엔 추측에 불과했던 일정 예측이,
이제는 과학이 되고 있습니다.
왜 인간의 추정은 틀릴까?
계획 오류의 본질
인간의 뇌는 추정할 때 "희망"과 "낙관"을 담당하는 영역이 활성화됩니다. 우리는 무의식적으로 최선의 시나리오를 가정합니다.
반면 ML은 감정이 없습니다. 데이터만 봅니다:
- 비슷한 프로젝트 100개 중 80개가 지연됐다면 → 80% 확률로 지연 예측
- 특정 기술 스택 사용 시 평균 1.5배 지연 → 자동으로 버퍼 추가
- 팀원 이직률이 높을 때 생산성 30% 감소 → 일정에 반영
ML 일정 예측의 핵심 요소
1. 피처 엔지니어링 (무엇을 볼 것인가)
ML 모델에 입력할 특성들을 정의합니다:
프로젝트 특성
- 작업 수, 복잡도, 기술 스택
- 요구사항 명확도 (1-10 점수)
- 고객 유형 (내부/외부/정부)
팀 특성
- 팀 규모, 평균 경력
- 과거 프로젝트 성공률
- 팀워크 지수 (설문 기반)
환경 특성
- 계절 (연말은 생산성 저하)
- 동시 진행 프로젝트 수
- 조직 변화 (인수합병, 구조조정)
과거 데이터
- 유사 프로젝트 실제 소요 시간
- 초기 추정 vs 실제의 비율
- 지연 패턴과 원인
2. 모델 선택 (어떻게 예측할 것인가)
회귀 모델 (Regression)
from sklearn.ensemble import RandomForestRegressor
# 랜덤 포레스트로 일정 예측
model = RandomForestRegressor(n_estimators=100)
model.fit(X_train, y_train)
predicted_days = model.predict(X_new_project)
연속적인 값(일수)을 예측할 때 사용합니다.
분류 모델 (Classification)
from sklearn.ensemble import GradientBoostingClassifier
# 지연 여부 예측 (정시/지연/심각한 지연)
model = GradientBoostingClassifier()
model.fit(X_train, y_train)
risk_level = model.predict(X_new_project)
카테고리(정시 완료/지연)를 예측할 때 사용합니다.
시계열 모델 (Time Series)
from prophet import Prophet
# 프로젝트 진행률 예측
model = Prophet()
model.fit(historical_progress)
future_progress = model.predict(future_dates)
시간에 따른 진행률을 예측할 때 사용합니다.
3. 실시간 학습 (계속 똑똑해지기)
프로젝트가 끝날 때마다 실제 데이터로 모델을 재학습시킵니다:
def update_model(completed_project):
# 1. 예측과 실제 비교
prediction_error = actual_duration - predicted_duration
# 2. 오차 원인 분석
error_factors = analyze_error_causes(prediction_error)
# 3. 모델 재학습
model.partial_fit(new_data)
# 4. 성능 개선 확인
new_accuracy = evaluate_model()
return new_accuracy
실전 ML 일정 예측 시스템 구축
Step 1: 데이터 수집
최소 30개 이상의 과거 프로젝트 데이터가 필요합니다:
project_id,team_size,tech_stack,requirements_clarity,planned_days,actual_days
1,5,React,8,60,75
2,8,Vue,6,90,140
3,3,Angular,9,30,28
...
Step 2: 데이터 전처리
import pandas as pd
from sklearn.preprocessing import StandardScaler
# 데이터 로드
df = pd.read_csv('project_history.csv')
# 범주형 변수 인코딩
df['tech_stack_encoded'] = pd.get_dummies(df['tech_stack'])
# 정규화
scaler = StandardScaler()
df[['team_size', 'requirements_clarity']] = scaler.fit_transform(
df[['team_size', 'requirements_clarity']]
)
# 지연 비율 계산
df['delay_ratio'] = df['actual_days'] / df['planned_days']
Step 3: 모델 학습
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestRegressor
from sklearn.metrics import mean_absolute_error
# 데이터 분할
X = df.drop(['actual_days'], axis=1)
y = df['actual_days']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)
# 모델 학습
model = RandomForestRegressor(
n_estimators=100,
max_depth=10,
min_samples_split=5
)
model.fit(X_train, y_train)
# 성능 평가
predictions = model.predict(X_test)
mae = mean_absolute_error(y_test, predictions)
print(f"평균 오차: {mae:.1f}일")
Step 4: 예측 신뢰 구간
단일 예측값보다 신뢰 구간을 제공하는 것이 더 유용합니다:
def predict_with_confidence(model, X_new, confidence=0.9):
# 100번 예측하여 분포 생성
predictions = []
for _ in range(100):
# 부트스트래핑으로 다양한 예측 생성
sample = X_train.sample(frac=1, replace=True)
model.fit(sample)
pred = model.predict(X_new)
predictions.append(pred)
# 신뢰 구간 계산
lower = np.percentile(predictions, (1-confidence)/2 * 100)
upper = np.percentile(predictions, (1+confidence)/2 * 100)
median = np.median(predictions)
return {
'예상': median,
'최선': lower,
'최악': upper
}
ML 예측의 실제 효과
사례 1: 스포티파이의 프로젝트 예측
도입 전: 평균 40% 일정 초과
도입 후: 평균 12% 일정 초과
개선: 28%p 정확도 향상
핵심 인사이트:
- 팀 규모 8명 이상일 때 급격한 생산성 저하
- 마이크로서비스 수가 15개를 넘으면 통합 시간 2배 증가
사례 2: 넷플릭스의 배포 예측
문제: 배포 시간을 정확히 예측 못해 사용자 불편
해결: ML로 배포 소요 시간 예측
결과: 95% 정확도로 배포 시간 예측
ML 도입 시 주의사항
1. 데이터의 질이 핵심
"쓰레기를 넣으면 쓰레기가 나온다" (GIGO)
부정확한 과거 데이터로 학습하면 부정확한 예측이 나옵니다.
2. 과적합 주의
과거 데이터에 너무 최적화되면 새로운 상황을 예측 못합니다.
3. 설명 가능성
"AI가 그렇게 예측했어요"로는 경영진을 설득할 수 없습니다. SHAP, LIME 등으로 예측 근거를 설명할 수 있어야 합니다.
지금 시작할 수 있는 것
1단계: 데이터 수집 시작
엑셀이라도 좋습니다. 프로젝트 데이터를 모으기 시작하세요.
2단계: 간단한 모델부터
복잡한 딥러닝보다 선형 회귀부터 시작하세요.
3단계: 점진적 개선
100% 자동화보다 인간의 판단 + ML 보조가 현실적입니다.
핵심 정리
"미래를 예측하는 가장 좋은 방법은 과거를 이해하는 것이다"
ML은 마법이 아닙니다.
과거의 패턴을 찾아 미래를 예측하는 도구일 뿐입니다.
하지만 이 도구를 잘 활용하면, 프로젝트 일정 예측이 추측이 아닌 과학이 됩니다.
완벽한 예측은 불가능합니다.
하지만 45%의 정확도를 75%로 올릴 수 있다면,
그것만으로도 엄청난 가치가 있습니다.
지금부터 데이터를 모으세요.
1년 후에는 여러분도 AI로 일정을 예측하는 PM이 될 수 있습니다.
AI 기반 프로젝트 관리 도구를 경험하고 싶으신가요? Plexo를 확인해보세요.


