Un bon développeur qui met 2 semaines à être productif = 2 semaines perdues + frustration. Voici comment passer à 2 jours avec un onboarding structuré.
Le coût d’un mauvais onboarding
Situation classique
Jour 1 : Setup machine (bloqué sur accès)
Jour 2 : Setup encore (doc obsolète)
Jour 3 : Premier build (fail, dépendances)
Jour 4 : Essayer de comprendre archi
Jour 5 : Première PR (rejected, standards)
...
Jour 10 : Enfin productif
Coût :
- 2 semaines de salaire perdu (~$4k)
- Frustration nouveau dev
- Temps équipe mobilisé
Impact long terme
Mauvais onboarding :
→ Premier mois frustrant
→ Doutes sur choix entreprise
→ 30% quittent dans 90 jours
Bon onboarding :
→ Productif rapidement
→ Confiance boostée
→ Rétention +50%
Les 4 piliers d’un onboarding efficace
1. Setup automatisé (< 1 heure)
Avant :
# Doc obsolète, 47 étapes manuelles
1. Install Node 16.3.0 (pas 16.4!)
2. Install PostgreSQL
3. Create DB manually
4. Install Redis
5. Configure .env (values where?)
...
Après :
# Script one-click
git clone repo
cd repo
./setup.sh
# 15 minutes plus tard :
✅ Dependencies installed
✅ Database created
✅ Env configured
✅ Dev server running
🚀 Ready to code!
setup.sh exemple :
#!/bin/bash
echo "🚀 Setting up dev environment..."
# Check prerequisites
command -v node >/dev/null || { echo "Install Node first"; exit 1; }
# Install dependencies
npm install
# Setup database (Docker)
docker-compose up -d
# Wait for DB ready
until docker-compose exec -T db pg_isready; do
sleep 1
done
# Run migrations
npm run db:migrate
# Seed data
npm run db:seed
# Copy env template
cp .env.example .env
echo "✅ Setup complete!"
echo "Run: npm run dev"
2. Documentation claire (pas obsolète)
Structure README.md :
# Project Name
## Quick Start (< 5 minutes)
```bash
./setup.sh
npm run dev
Open http://localhost:3000
Architecture (5 minute read)
[High-level diagram]
Your First PR (30 minutes)
[Step-by-step guide]
Get Help
- Slack: #team-backend
- Buddy: @assigned-mentor
- Docs: docs/
Common Issues
[FAQ based on real onboarding feedback]
**Documentation vivante :**
```yaml
# docs/onboarding-checklist.md
# Mise à jour à chaque nouvel arrivant
Last updated: 2025-11-20
Last tested by: @alice (worked ✅)
Known issues:
- MacOS 14.1: Need to install XCode CLI tools
Fix: xcode-select --install
3. Buddy system (mentor dédié)
Assignment :
Nouveau dev → 1 buddy assigné (2 semaines)
Buddy responsabilités :
- Check-in quotidien (15min)
- Disponible questions
- Review premières PRs
- Intro à l'équipe
Buddy checklist :
## Week 1
Day 1:
- [ ] Morning: Welcome coffee ☕
- [ ] Setup machine together
- [ ] Tour codebase (30min)
- [ ] Assign first task (bug fix)
Day 2:
- [ ] Check-in: Setup OK?
- [ ] Code review first PR
- [ ] Introduce team members
Day 3-5:
- [ ] Daily check-in
- [ ] Answer questions
- [ ] Pair programming session
## Week 2
- [ ] Gradually reduce support
- [ ] Assign independent task
- [ ] Feedback session
4. Progressive tasks (quick wins)
Progression :
Day 1: Bug fix (1 file, clear scope)
Day 2: Small feature (2-3 files)
Day 3-5: Medium feature (new endpoint)
Week 2: Independent feature
First task criteria :
✅ Well-defined (no ambiguity)
✅ Small (< 3 hours)
✅ Safe (low risk)
✅ Valuable (real impact)
✅ Teaches codebase
Example:
"Fix: Email validation accepts invalid domains"
- Touch validation.ts
- Add test
- Learn test framework
- Quick win
Onboarding timeline (2 jours)
Jour 0 (pre-boarding)
Email 1 semaine avant :
Hi {name},
Excited to have you join!
Before Day 1:
- [ ] Setup laptop (IT will send)
- [ ] Access granted (check email)
- [ ] Read: docs/onboarding/README.md
Your buddy: @alice
Questions? Slack me anytime
See you Monday!
Jour 1 (8h-18h)
9h00 - 9h30 : Welcome
- Meet manager
- Tour office
- Team intro
9h30 - 11h00 : Setup
- Run ./setup.sh
- Buddy helps if stuck
- First local build ✅
11h00 - 12h00 : Codebase tour
- Architecture overview (Buddy)
- Where is what
- Naming conventions
12h00 - 13h00 : Team lunch 🍕
14h00 - 15h00 : Tools & Process
- GitHub workflow
- CI/CD pipeline
- Monitoring dashboards
15h00 - 17h00 : First task
- Assigned bug fix
- Buddy available
- Create PR
17h00 - 18h00 : Debrief
- Day 1 feedback
- Questions answered
Jour 2 (8h-18h)
9h00 - 12h00 : Complete first PR
- Address review comments
- Merge ✅
- Deploy to staging
- Celebrate 🎉
13h00 - 17h00 : Second task
- Small feature (more independence)
- Buddy reviews
17h00 - 18h00 : Week planning
- Assign Week 1 tasks
- Set expectations
Checklist automatisée
// Slack bot onboarding
const onboardingChecklist = {
day0: [
{ task: 'Laptop received', assignee: 'IT' },
{ task: 'Accesses granted', assignee: 'IT' },
{ task: 'Welcome email sent', assignee: 'Manager' }
],
day1: [
{ task: 'Setup complete', assignee: 'New hire' },
{ task: 'First commit', assignee: 'New hire' },
{ task: 'Team intro done', assignee: 'Buddy' }
],
day2: [
{ task: 'First PR merged', assignee: 'New hire' },
{ task: 'Feedback session', assignee: 'Manager' }
]
};
// Auto-remind si pas fait
cron.schedule('0 17 * * *', () => {
checkOnboardingProgress();
sendReminders();
});
Documentation : Ce qui doit exister
1. Architecture overview
# Architecture
## High-level
[Diagram: Frontend → API → Database]
## Tech stack
- Frontend: React 18 + TypeScript
- Backend: Node.js + Express
- Database: PostgreSQL 15
- Cache: Redis
- Queue: RabbitMQ
## Key concepts
- Authentication: JWT tokens
- Authorization: Role-based (RBAC)
- API: RESTful + GraphQL
2. Development workflow
# Workflow
## Branching
1. Create branch: `git checkout -b feature/my-feature`
2. Make changes
3. Push: `git push origin feature/my-feature`
4. Create PR on GitHub
5. Review process (< 24h)
6. Merge to main
7. Auto-deploy staging
8. Manual deploy prod (Fridays)
## Code standards
- ESLint config (auto-enforced)
- Prettier format (auto-enforced)
- 80%+ test coverage required
3. Testing guide
# Testing
## Run tests
```bash
npm test # All tests
npm test -- --watch # Watch mode
npm test users.test # Specific file
Writing tests
// Example test
describe('User API', () => {
it('should create user', async () => {
const res = await request(app)
.post('/api/users')
.send({ name: 'Alice' })
.expect(201);
expect(res.body).toMatchObject({
id: expect.any(Number),
name: 'Alice'
});
});
});
### 4. Deployment guide
```markdown
# Deployment
## Staging (auto)
Every merge to main → Auto-deploy staging
## Production (manual)
```bash
npm run deploy:prod
# Requires:
# - Approval from 2 team members
# - All tests green
# - Staging validated
Monitoring
- Grafana: https://grafana.company.com
- Sentry: https://sentry.io/company
## Feedback loop
### Week 1 : Daily check-in
```markdown
Daily (15min with buddy):
Questions:
1. How was your day?
2. Any blockers?
3. What did you learn?
4. What's unclear?
Actions:
- Note feedback
- Adjust onboarding doc
Week 2 : Feedback session
30min with manager:
1. What went well?
2. What was frustrating?
3. How can we improve onboarding?
4. Questions about role/team?
→ Update onboarding based on feedback
Month 1 : Retrospective
60min :
1. Overall experience (1-10)
2. What helped most?
3. What should we change?
4. Suggestions for next hire?
→ Iterate on process
Metrics onboarding
┌────────────────────────────────────┐
│ Onboarding Dashboard │
├────────────────────────────────────┤
│ Time to first commit: 4h ✅ │
│ Time to first PR merged: 18h ✅ │
│ Time to productive: 2 days ✅ │
│ │
│ Satisfaction (last 5 hires): │
│ - Setup process: 9.2/10 │
│ - Documentation: 8.5/10 │
│ - Buddy system: 9.8/10 │
│ - Overall: 9.1/10 │
│ │
│ 90-day retention: 95% ✅ │
└────────────────────────────────────┘
Cas réel : Startup tech
Avant
- Setup: 2 jours (doc obsolète)
- First PR: Jour 8
- Productive: Semaine 3
- Satisfaction: 6/10
- 90-day retention: 70%
Process implémenté
- setup.sh automatisé
- Onboarding doc rewrité
- Buddy system formalisé
- First task template créé
Après (12 mois, 8 nouveaux devs)
- Setup: 1 heure ✅
- First PR: Jour 1 ✅
- Productive: Jour 2-3 ✅
- Satisfaction: 9.1/10 ✅
- 90-day retention: 100% ✅
ROI :
- Gain productivité : 2 semaines × 8 devs = 16 semaines
- Coût : ~$32k économisés
- Investissement setup : 1 semaine dev (amortisé)
Templates
Email pre-boarding
Subject: Welcome to {Company}! 🎉
Hi {Name},
Thrilled to have you join us on {Start Date}!
**Before your first day:**
- [ ] Laptop shipped (track: {link})
- [ ] Email account: {email}
- [ ] Slack invite: Check email
- [ ] Read: {onboarding_doc_link}
**Your first day:**
- Start: 9h00
- Meet: {Manager} (your manager)
- Buddy: {Buddy} (your mentor)
**Questions?**
Reply to this email or Slack me!
See you soon!
{Manager}
First task template
# First Task: Fix email validation
**Issue:** Email validation accepts invalid domains
**Context:**
- File: `src/validation/email.ts`
- Current: Regex only checks format
- Wanted: Also check domain exists (MX record)
**Acceptance criteria:**
- [ ] Add DNS MX check
- [ ] Add tests
- [ ] Update docs
**Resources:**
- DNS library: `npm install dns-lookup`
- Similar code: `src/validation/domain.ts`
**Questions?**
Ask @{buddy} anytime!
**Estimated:** 2-3 hours
Erreurs à éviter
Erreur 1 : Documentation obsolète
❌ README last updated: 2 years ago
✅ Doc tested at each hire
"Last tested: {date} by {new hire}"
Erreur 2 : No buddy assigned
❌ "Team will help you"
→ Personne ne prend ownership
✅ 1 buddy assigné, responsable
Erreur 3 : Tasks trop complexes
❌ First task: "Refactor auth system"
→ Overwhelming, prend 2 semaines
✅ First task: Bug fix simple
→ Quick win, boost confiance
Erreur 4 : No feedback loop
❌ Même process depuis 3 ans
→ Pas d'amélioration
✅ Feedback à chaque hire
→ Itération continue
Conclusion
Onboarding n’est pas un détail.
C’est votre première impression :
- Productivité rapide
- Rétention améliorée
- Culture positive
4 piliers :
- Setup automatisé (<1h)
- Documentation claire
- Buddy system
- Progressive tasks
ROI immédiat :
- 2 semaines → 2 jours
- Satisfaction ↑
- Rétention ↑
Investissement :
- 1 semaine pour setup initial
- Amortisé dès 2-3 hires
Commencez maintenant. Votre prochain hire vous remerciera.
Et vous, votre process onboarding ?