I've never worked for a product company, and I have lots of personal projects. Because of this, I find myself jumping between different projects constantly. I manage this by keeping up to date Teamocil profiles for each project I work on, and using a development tools that fit completely inside of a tmux session (with the exception of my web browser, of course.)
There are lots of kinds of projects where your tools can't all run inside of terminals. Because I work primarily on Rails projects, I get to live in my terminal most of the time.
Here's an example Teamocil configuration for a simple Rails project.
name: Project Name
windows:
- name: editor
root: ~/Codes/project_name
focus: true
layout: even-vertical
panes:
- commands:
- clear && git status
focus: true
- name: server
root: ~/Codes/project_name
layout: even-vertical
panes:
- clear && bundle exec rails s -p 9876
- name: logs
root: ~/Codes/project_name
layout: even-vertical
panes:
- clear && tail -f log/test.log
- clear && tail -f log/development.log | grep -e "Started\|Rendered\|Completed\|Served"
- clear && tail -f log/development.log | grep -e "SQL\|CACHE"
This gives me a window for running my editor (Vim), a window with my rails server
, and
then a window where I can see vertical splits showing important info from the
logs.
Being able to monitor which SQL queries are being run, and the view lifecycle at glance comes in very handy when you're debugging an unexpected bug in an application.
For added convenience, I have them on in a private gist, so that on new
machines I can run git clone [email protected]:REDACTED.git ~/.teamocil
to
get my up to date profiles.
For projects that require additional processes for development (like webpack) it's easy to add more windows or panes to handle those.