When I first started working in Drupal, I created all my sites on a staging URL (http://newsite.tzk-design.com) that lived on my studio website. Updating a module meant downloading the project from http://drupal.org, unpacking and uploading it to the staging URL, and then running updates manually on the server. Theming meant making changes to a file, uploading it to the server, and refreshing the page to see changes.
While this is a totally reasonable way to work, there were a few problems with it:
Depending on my Internet connection or the size of a file, uploading files to a server took a significant amount of time—particularly when you add up the time spent tweaking little bits of CSS and checking the results.
If I had no Internet connection (e.g., when traveling) or if the connection was spotty, I was screwed.
Perhaps most importantly, everything I was doing could conceivably be found by someone else on the Web. This left me constantly worried that people—particularly clients—would end up randomly finding my half-finished work all over the Web. And while there were certainly ways to avoid that, such as HTTP authentication on the server, that alone didn’t solve the first two problems, which are much more annoying.
When I finally figured out how to set up a local hosting environment on my laptop (thanks to a few wonderful friends in the Drupal community, including developer Ben Buckman, ...