Entwickler-Tools, die sich über eine Karriere summieren
Die Tools, Shell- und Editor-Konfiguration und Automatisierungen, die sich über eine Karriere summieren — und ein Setup, das nicht im Weg steht.

Der Tooling-Multiplikator
Jeder Entwickler hat ein Setup, das ihm entweder hilft oder im Weg steht. Der Zinseszinseffekt guter Tools ist über eine Karriere hinweg enorm: Wenn deine Tools dir 30 Minuten pro Tag sparen, sind das 120 Stunden pro Jahr. Noch wichtiger ist, dass weniger Reibung dich länger im Flow hält.
Hier geht es nicht darum, dem neuesten Tool hinterherzujagen. Es geht darum, einmal in Dinge zu investieren, die sich jeden Tag auszahlen.
Terminal: Das Fundament
Dein Terminal ist dein Kommandozentrum. Zeit, die du hier verbringst, ist multiplizierte Zeit.
Shell-Konfiguration, die dir nicht im Weg steht
# .zshrc — the essentials
# Better history search
bindkey '^R' history-incremental-search-backward
# Fuzzy file finder — changes how you navigate
[ -f ~/.fzf.zsh ] && source ~/.fzf.zsh
export FZF_DEFAULT_COMMAND='fd --type f --hidden --follow --exclude .git'
export FZF_CTRL_T_COMMAND="$FZF_DEFAULT_COMMAND"
# Smarter cd — jumps to frecent directories
eval "$(zoxide init zsh)"
# z myproject → jumps to ~/code/projects/myproject
# Aliases that earn their keep
alias g='git'
alias gs='git status'
alias gl='git log --oneline --graph --decorate -20'
alias gco='git checkout'
alias gcob='git checkout -b'
alias gd='git diff'
alias gds='git diff --staged'
alias ..='cd ..'
alias ...='cd ../..'
alias ll='ls -la'Git-Aliases für den Alltag
# ~/.gitconfig
[alias]
st = status
co = checkout
br = branch
ci = commit
unstage = reset HEAD --
last = log -1 HEAD
visual = !gitk
# Undo last commit, keep changes staged
undo = reset --soft HEAD^
# Show files changed in last commit
show-files = diff-tree --no-commit-id -r --name-only -r HEAD
# Clean up merged branches
cleanup = "!git branch --merged | grep -v '\\*\\|master\\|main\\|develop' | xargs -n 1 git branch -d"
# Pretty log
lg = log --color --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commitEditor: VS-Code-Konfiguration, die skaliert
Der Editor ist, wo du die meiste Zeit verbringst. Ein gut konfigurierter Editor entfernt ständige kleine Reibungen.
// .vscode/settings.json — project-level settings committed to the repo
{
"editor.formatOnSave": true,
"editor.codeActionsOnSave": {
"source.fixAll.eslint": "explicit",
"source.organizeImports": "explicit"
},
"editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.tabSize": 2,
"editor.rulers": [100],
"editor.minimap.enabled": false,
"editor.bracketPairColorization.enabled": true,
"editor.inlineSuggest.enabled": true,
"files.trimTrailingWhitespace": true,
"typescript.preferences.importModuleSpecifier": "non-relative",
"typescript.updateImportsOnFileMove.enabled": "always",
"search.exclude": {
"**/node_modules": true,
"**/.next": true,
"**/dist": true,
"**/.git": true
}
}Extensions, die sich lohnen
Für einen TypeScript/React-Stack sind das die, die ich auf jedem Rechner neu installiere:
ESLint — inline linting in the editor
Prettier — auto-formatting on save
GitLens — git blame, history, and diff in the editor
Error Lens — surfaces errors inline instead of on hover
Import Cost — shows bundle size of each import
Tailwind CSS IntelliSense — autocomplete for Tailwind classes
Thunder Client — lightweight API testing (replaces Postman for quick checks)
Das Projekt-Scaffold, das Stunden spart
Jedes neue Projekt fängt anders an. Ein persönliches Scaffold oder ein Template-Repository eliminiert die "Setup-Stunde" am Anfang jedes Projekts.
# package.json scripts that the whole team uses
{
"scripts": {
"dev": "next dev --turbo",
"build": "next build",
"lint": "eslint . --max-warnings 0",
"lint:fix": "eslint . --fix",
"format": "prettier --write .",
"format:check": "prettier --check .",
"type-check": "tsc --noEmit",
"test": "jest",
"test:watch": "jest --watch",
"check": "npm run type-check && npm run lint && npm run format:check",
"prepare": "husky"
}
}# .husky/pre-commit — catch issues before they reach CI
#!/bin/sh
npx lint-staged// lint-staged.config.js — run only on changed files
{
"*.{ts,tsx}": ["eslint --fix", "prettier --write"],
"*.{css,md,json}": ["prettier --write"]
}Automatisierung: Dinge, die du nie zweimal manuell machen solltest
#!/bin/bash
# scripts/new-feature.sh — start a feature branch with all setup done
BRANCH_NAME="feat/$1"
git checkout main
git pull origin main
git checkout -b "$BRANCH_NAME"
echo "Branch $BRANCH_NAME created and ready"
echo "Remember to: create a draft PR early, enable CI"// scripts/check-env.ts — validate env vars at startup
const required = ["DATABASE_URL", "NEXTAUTH_SECRET", "NEXTAUTH_URL"] as const;
const missing = required.filter((key) => !process.env[key]);
if (missing.length > 0) {
console.error(
`Missing required environment variables: ${missing.join(", ")}`,
);
console.error("Copy .env.example to .env.local and fill in the values");
process.exit(1);
}Die Gewohnheit, die sich vervielfacht
Die besten Tooling-Verbesserungen vervielfachen sich, weil sie das Verhalten ändern:
- Format on Save entfernt Formatierungsdiskussionen aus der Code Review
- Pre-Commit-Hooks entfernen Lint-Fehler aus der CI
- Gute Git-Aliases machen Branching mühelos, deshalb branchst du freier
- Ein schnelles Terminal macht dir die Kommandozeile vertrauter
Investiere einen Nachmittag in die richtige Einrichtung deiner Umgebung. Dann investiere einen weiteren, sobald du dich bei etwas Manuellem wiederholend erwischst. Über ein Jahr gesehen ist die kumulierte Rendite dieser Zeit enorm.
Das Ziel ist nicht das ausgefeilteste Setup, sondern eines, bei dem die Tools unsichtbar sind und du nur noch über das Problem nachdenkst.


