Spaces:
Running
Running
File size: 7,861 Bytes
c4d486b | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 | # Professional Development Workflow Guide
## The Big Picture: Git Branches β Deployment Environments
**Common Misconception:** Thinking branches = environments
**Reality:** Branches are code versions, environments are where code runs
```
Git Workflow (Code): Deployment Pipeline (Servers):
feature-branch Local Development
β β
development branch β Development Server
β β
main branch β Staging Server (Optional)
β β
(same main branch) β Production Server
```
---
## Git Workflow: Managing Code Versions
### Step 1: Feature Development
```bash
# Create feature branch from development
git checkout development
git pull origin development
git checkout -b feature/new-chatbot-intent
# Work on your feature
# Make commits
git add .
git commit -m "Add product inquiry intent"
```
### Step 2: Integration Testing
```bash
# Merge feature into development branch
git checkout development
git merge feature/new-chatbot-intent
git push origin development
# Delete feature branch (cleanup)
git branch -d feature/new-chatbot-intent
```
### Step 3: Production Release
```bash
# When development is stable, merge to main
git checkout main
git pull origin main
git merge development
git push origin main
```
**Key Point**: `main` branch should always be production-ready!
---
## Deployment Pipeline: Where Code Runs
### Environment 1: Local Development
**Who uses it**: You, while developing
**Git branch**: Any branch you're working on
**Config file**: `.env.development`
**Purpose**: Fast iteration and debugging
```bash
# Run locally
python main.py
# Uses .env.development automatically
```
### Environment 2: Development Server (Optional)
**Who uses it**: Team members for integration testing
**Git branch**: `development` branch
**Config file**: `.env.development`
**Purpose**: Test how features work together
```bash
# Deploy development branch to dev server
git push origin development
# Server uses .env.development
```
### Environment 3: Staging Server (Pre-Production)
**Who uses it**: QA team, clients, final testing
**Git branch**: `main` branch
**Config file**: `.env.staging`
**Purpose**: Final testing before going live
```bash
# Deploy main branch to staging server
APP_ENV=staging python main.py
# Uses .env.staging with production-like settings
```
### Environment 4: Production Server (Live)
**Who uses it**: Real users/customers
**Git branch**: `main` branch
**Config file**: `.env.production`
**Purpose**: Serve real users
```bash
# Deploy main branch to production server
APP_ENV=production python main.py
# Uses .env.production with live settings
```
---
## Why Different Environment Configs?
### Development (.env.development)
```bash
# Loose security for debugging
API_DEBUG=true
CORS_ORIGINS=*
LOG_LEVEL=DEBUG
CONFIDENCE_THRESHOLD=0.3 # Lower threshold for testing
# Local connections
API_HOST=127.0.0.1
BACKEND_API_URL=http://127.0.0.1:8000
```
### Staging (.env.staging)
```bash
# Production-like but safer
API_DEBUG=true # Still debug for testing
CORS_ORIGINS=https://staging-app.netlify.app
LOG_LEVEL=INFO
CONFIDENCE_THRESHOLD=0.5 # Production-like threshold
# Staging URLs
API_HOST=0.0.0.0
BACKEND_API_URL=https://staging-chatbot.railway.app
```
### Production (.env.production)
```bash
# Tight security and performance
API_DEBUG=false
CORS_ORIGINS=https://smart-chatbot-demo.netlify.app
LOG_LEVEL=ERROR # Only log errors
CONFIDENCE_THRESHOLD=0.5 # Optimized threshold
# Production URLs
API_HOST=0.0.0.0
BACKEND_API_URL=https://smart-chatbot.railway.app
```
---
## Real-World Workflow Example
### Monday: New Feature Request
```bash
# 1. Create feature branch
git checkout -b feature/chinese-voice-support
# 2. Develop locally (uses .env.development)
python main.py # Test on localhost
# 3. Commit and push
git commit -m "Add Chinese voice recognition"
git push origin feature/chinese-voice-support
```
### Tuesday: Code Review & Integration
```bash
# 4. Merge to development after code review
git checkout development
git merge feature/chinese-voice-support
# 5. Deploy to development server for team testing
# (Development server pulls development branch)
```
### Wednesday: Prepare for Release
```bash
# 6. Merge to main when development is stable
git checkout main
git merge development
# 7. Deploy to staging for final testing
# (Staging server runs main branch with .env.staging)
```
### Thursday: Go Live
```bash
# 8. Deploy to production (same main branch!)
# (Production server runs main branch with .env.production)
```
**Key Insight**: Same code (`main` branch), different environments (staging vs production)!
---
## Environment Differences: What Changes?
| Aspect | Development | Staging | Production |
|--------|-------------|---------|------------|
| **Data** | Fake test data | Production-like test data | Real customer data |
| **URLs** | localhost:8000 | staging-app.com | myapp.com |
| **Debugging** | Full debug info | Some debug info | Minimal logging |
| **Security** | Relaxed CORS | Restricted CORS | Strict CORS |
| **Performance** | Doesn't matter | Should be fast | Must be fast |
| **Integrations** | Mock APIs | Test APIs | Live APIs |
---
## Why This Matters for Your Career
### Shows Professional Understanding
```bash
# Amateur approach
git push origin main # Hope it works in production! π€
# Professional approach
feature β development β main
β β β
local β dev server β staging β production
```
### Demonstrates Key Skills
- **Risk Management**: Staging catches issues before users see them
- **Team Collaboration**: Multiple environments support different roles
- **System Architecture**: Understanding infrastructure beyond just code
- **Quality Assurance**: Built-in testing at each stage
---
## Portfolio Project Simplification
**For your chatbot project, you can use a simplified workflow:**
### Minimal Setup (2 Environments)
```bash
Development: .env.development (localhost)
Production: .env.production (Railway + Netlify)
```
### Professional Setup (4 Environments)
```bash
Local: .env.development (localhost)
Development: .env.development (team dev server)
Staging: .env.staging (client testing server)
Production: .env.production (live user server)
```
**Recommendation**: Use minimal setup for speed, but **mention you understand the full professional workflow** in interviews!
---
## Interview Gold: What This Shows
**When recruiter asks**: *"Tell me about your development process"*
**Your answer**:
> "I follow professional Git workflow with feature branches merging to development, then main. I use environment-specific configurations - development for local work with debug enabled, staging for pre-production testing with production-like settings, and production with optimized security and performance. This ensures code quality and reduces production risks."
**Boom!** π― You just demonstrated enterprise-level understanding.
---
## Quick Commands Reference
### Git Workflow
```bash
# Start new feature
git checkout -b feature/my-feature
# Integrate to development
git checkout development && git merge feature/my-feature
# Deploy to production
git checkout main && git merge development
```
### Environment Management
```bash
# Local development
python main.py
# Staging deployment
APP_ENV=staging python main.py
# Production deployment
APP_ENV=production python main.py
```
### Configuration Check
```bash
# See which environment is loaded
curl http://localhost:8000/
# Returns: {"environment": "development", ...}
```
Remember: **Professional workflow is about managing risk and enabling collaboration, not just moving code around!** |