Team Setup Guide
Setting up DevEx for teams and organizations to ensure consistent development environments
Team Setup Guide
DevEx excels at creating consistent development environments across team members, operating systems, and deployment environments. This guide covers best practices for implementing DevEx in team and organizational settings.
Benefits of Team DevEx
Environment Consistency
Identical tooling across all team members
Faster Onboarding
New developers productive in minutes
Reduced Support
Fewer 'works on my machine' issues
Standardized Tooling
Consistent versions and configurations
Team Configuration Strategy
This guide builds on concepts from the Getting Started Guide. For security considerations in team environments, review our Security Guide.
Centralized Configuration Management
Create Team Configuration Repository
Set up a central repository for your team's DevEx configuration:
# Create the repository
mkdir team-devex-config
cd team-devex-config
git init
# Create directory structure
mkdir -p configs/{shared,projects,roles}
mkdir -p templates
mkdir -p scriptsDefine Base Configuration
Create a shared base configuration that all team members will use:
# configs/shared/applications.yaml
applications:
development:
- name: git
description: "Version control system"
default: true
- name: docker
description: "Container platform"
default: true
- name: vscode
description: "Team standard editor"
default: true
post_install:
- shell: "code --install-extension ms-vscode.vscode-typescript-next"
- shell: "code --install-extension esbenp.prettier-vscode"
- shell: "code --install-extension bradlc.vscode-tailwindcss"Create Role-Based Configurations
Define specific tools for different team roles:
# configs/roles/frontend.yaml
applications:
development:
- name: node
install_method: mise
install_command: node@lts
default: true
- name: pnpm
description: "Fast package manager"
default: true
- name: chrome
description: "Primary browser for testing"
default: true
- name: firefox
description: "Cross-browser testing"
default: falseProject-Specific Configurations
Create configurations for specific projects:
# configs/projects/mobile-app.yaml
applications:
development:
- name: react-native-cli
default: true
- name: android-studio
default: true
desktop_environments: ['all']
- name: xcode
default: true
macos:
install_method: mas
install_command: "497799835"Implementation Strategies
Option 1: Shared Configuration Repository
Best for teams that want centralized control:
# Team members clone the shared config
git clone https://github.com/yourcompany/devex-config.git ~/.devex
# Install DevEx with team configuration
devex install
# Stay updated with team changes
cd ~/.devex && git pull
devex install --updateOption 2: Configuration Templates
Best for teams that want flexibility with standards:
# Create team template
devex template create --name company-standard \
--from-config configs/shared/applications.yaml
# Team members use template
devex template apply company-standard
# Customize per developer needs
devex install additional-tools --category optionalOption 3: Layered Configuration
Best for complex organizations with multiple teams:
# ~/.devex/config-layers.yaml
layers:
- name: "company-base"
source: "https://github.com/company/devex-base"
priority: 10
- name: "team-frontend"
source: "https://github.com/company/devex-frontend"
priority: 20
condition: "team == 'frontend'"
- name: "project-mobile"
source: "https://github.com/company/devex-mobile"
priority: 30
condition: "project == 'mobile-app'"
- name: "personal"
source: "~/.devex/personal.yaml"
priority: 100Onboarding Automation
Automated Setup Script
Create a script for new team members:
#!/bin/bash
# scripts/onboard-developer.sh
set -e
echo "🚀 Welcome to the team! Setting up your development environment..."
# Install DevEx
if ! command -v devex &> /dev/null; then
echo "📦 Installing DevEx..."
# See /docs/guides/security for best practices
curl -fsSL https://devex.sh/install | bash
source ~/.bashrc
fi
# Clone team configuration
echo "⚙️ Setting up team configuration..."
if [ ! -d ~/.devex ]; then
git clone https://github.com/yourcompany/devex-config.git ~/.devex
fi
# Set up user-specific configuration
echo "👤 Setting up your personal configuration..."
read -p "Enter your full name: " fullname
read -p "Enter your email: " email
read -p "Enter your team (frontend/backend/devops/qa): " team
# Configure Git
git config --global user.name "$fullname"
git config --global user.email "$email"
# Apply team configuration
echo "🔧 Installing team tools..."
devex install --config ~/.devex/configs/shared/applications.yaml
devex install --config ~/.devex/configs/roles/${team}.yaml
# Set up SSH key
if [ ! -f ~/.ssh/id_ed25519 ]; then
echo "🔐 Generating SSH key..."
ssh-keygen -t ed25519 -C "$email" -f ~/.ssh/id_ed25519 -N ""
echo "📋 Add this public key to GitHub:"
cat ~/.ssh/id_ed25519.pub
fi
echo "✅ Setup complete! You're ready to code!"GitHub Codespaces Integration
Configure DevEx for GitHub Codespaces:
// .devcontainer/devcontainer.json
{
"name": "Team Development Environment",
"image": "mcr.microsoft.com/devcontainers/universal:latest",
"postCreateCommand": "curl -fsSL https://devex.sh/install | bash && devex install --config .devcontainer/devex.yaml",
"customizations": {
"vscode": {
"extensions": [
"ms-vscode.vscode-typescript-next",
"esbenp.prettier-vscode"
]
}
}
}# .devcontainer/devex.yaml
applications:
development:
- name: node
install_method: mise
install_command: node@lts
default: true
- name: python
install_method: mise
install_command: python@3.11
default: trueCI/CD Integration
GitHub Actions Workflow
# .github/workflows/devex-validation.yml
name: Validate DevEx Configuration
on:
pull_request:
paths:
- 'configs/**'
- '.devex/**'
jobs:
validate:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install DevEx
run: |
# Install DevEx with version pinning for CI reproducibility
curl -fsSL https://devex.sh/install | bash
- name: Validate Configuration
run: |
echo "$HOME/.local/share/devex/bin" >> $GITHUB_PATH
devex config validate configs/shared/applications.yaml
devex config validate configs/roles/
- name: Test Installation (Dry Run)
run: |
devex install --config configs/shared/applications.yaml --dry-runDocker Development Environment
# Dockerfile.dev
FROM ubuntu:22.04
# Install DevEx with security considerations
RUN apt-get update && apt-get install -y curl sudo ca-certificates
RUN curl -fsSL https://devex.sh/install | bash
# Copy team configuration
COPY configs/ /opt/devex-config/
# Install team tools
RUN /root/.local/share/devex/bin/devex install --config /opt/devex-config/shared/applications.yaml
# Set up development user
RUN useradd -m -s /bin/bash developer
USER developer
WORKDIR /home/developer
# Apply user configuration
RUN /root/.local/share/devex/bin/devex config apply --userTeam Policies and Standards
Configuration Standards
Team Configuration Standards:
- Version Pinning: Pin language versions for consistency
- Security Tools: Include security scanners and linters
- Documentation Tools: Standardize on documentation formats
- Testing Tools: Include testing frameworks and tools
- Code Quality: Enforce code formatting and linting
Example standards file:
# configs/standards.yaml
standards:
programming_languages:
node:
version: "18.17.0" # LTS version
package_manager: "pnpm"
python:
version: "3.11.5"
package_manager: "pip"
virtual_env: "venv"
code_quality:
linters:
- eslint
- pylint
- golangci-lint
formatters:
- prettier
- black
- gofmt
security:
scanners:
- snyk
- bandit
- gosec
testing:
frameworks:
- jest
- pytest
- go-testRole-Based Access Control
Control access to different tools based on team roles:
# configs/access-control.yaml
roles:
junior_developer:
allowed_categories:
- development
- editors
restricted_tools:
- kubernetes-cli
- terraform
senior_developer:
allowed_categories: ["all"]
devops_engineer:
allowed_categories: ["all"]
required_tools:
- kubectl
- terraform
- ansibleMonitoring and Compliance
Usage Tracking
Track tool usage across the team:
# Generate team usage report
devex report usage --team --output team-usage.json
# Check compliance with team standards
devex report compliance --standards configs/standards.yamlUpdate Management
Manage updates across the team:
# Check for updates
devex update check --all
# Staged rollout
devex update apply --group beta-testers
devex update apply --group all --after-validationTroubleshooting Team Issues
Common Team Challenges
Problem: Team members have different tool versions
Solution:
# Pin versions in team configuration
applications:
development:
- name: node
install_method: mise
install_command: node@18.17.0 # Specific version
global: true
# Verify team alignment
devex report versions --teamAdvanced Team Features
Custom Team Commands
Create team-specific DevEx commands:
# scripts/team-commands.sh
#!/bin/bash
case "$1" in
"sync")
echo "🔄 Syncing with team configuration..."
cd ~/.devex && git pull
devex install --update
;;
"status")
echo "📊 Team environment status:"
devex report compliance --standards ~/.devex/configs/standards.yaml
;;
"reset")
echo "🔄 Resetting to team defaults..."
devex uninstall --all --confirm
devex install --config ~/.devex/configs/shared/applications.yaml
;;
esacIntegration with Team Tools
Slack Integration
#!/bin/bash
# scripts/slack-notify.sh
# Notify team of environment changes
webhook_url="https://hooks.slack.com/services/YOUR/SLACK/WEBHOOK"
curl -X POST -H 'Content-type: application/json' \
--data "{\"text\":\"🔧 $USER updated their development environment\"}" \
$webhook_urlJira Integration
# Link environment setup to Jira tickets
devex install --ticket PROJ-123 --comment "Setting up environment for new feature"Best Practices for Teams
Team DevEx Best Practices:
- Start Simple: Begin with core tools, add complexity gradually
- Version Everything: Use version control for all configurations
- Test Changes: Validate configuration changes before rolling out
- Document Decisions: Record why specific tools were chosen
- Regular Reviews: Periodically review and update team standards
- Feedback Loop: Collect feedback from team members regularly
- Security First: Include security tools and practices by default
- Backup Configurations: Keep backups of working configurations
Team Workflow Example
# 1. Developer proposes new tool
git checkout -b add-new-tool
# Edit configs/shared/applications.yaml
git commit -m "Add new-tool for improved productivity"
git push origin add-new-tool
# 2. Team reviews via PR
# - Automated validation runs
# - Team members review and test
# - Security team approves
# 3. Merge and rollout
git checkout main
git merge add-new-tool
# 4. Team updates their environments
# Automated notification sent to team
# Team members run: devex team syncMeasuring Success
Track the impact of DevEx on your team:
Metrics to Monitor
- Onboarding Time: Time from hire to first commit
- Environment Issues: Support tickets related to setup
- Tool Adoption: Usage of standardized tools
- Development Velocity: Sprint completion rates
- Developer Satisfaction: Team happiness surveys
Reporting Dashboard
# Generate team metrics
devex metrics generate --team --period monthly
# Key metrics to track:
# - Setup time (average minutes to productive environment)
# - Issue resolution (setup-related support tickets)
# - Compliance rate (% using standard tools)
# - Update adoption (% on latest configurations)