Work smart - not hard
A quote that stuck with me, was the following:
“Linux is only free if your time is worthless”
This expression hold some truth in the perspective of this protip, as in I won't spell out any details here - just point to some apps and assume you have the knowledge (equals experience = time spent using GNU\Linux) required to take it from here.
Today I started working for my first 'real' customer since I decided to start my own freelance adventure after 10 years working for my government. In the spirit of FOSS, I found it a nice thing to share it here. This customer is a middle large company who supports business with all things ranging from tactical planning, taxes, bookings, pay administration and what not. We (me and a graphical designer friend) took the job, in return for some extended support (uploading textual changes, sending news letter) for 3 years, I am getting their support in everything that is not related to coding. For a heavily regulated country like my own, this is a great burden to take of my shoulders. Now I can focus on coding always and not about stupid tax law and other non-hacking details ^^ That's tip 1: trading goods instead of money can be very profitable for both sides, make use when you can!
Next what I did was to create a Virtualbox image. I didn't use Vagrant boxes, mainly because I think this is a special customer - long term good relations and possible expansion plans, I deemed it worthy to build a custom ArchLinux system around it. Why? The reason is very simple: given the development team and stakeholder (myself - linux geek, my friend - macboy, the customers: lawyers and windows users) diversity it can become very hard, complex and technical to transfer ideas, software, there are portability issues and so on. Virtualbox runs everywhere (platforms), it's free and easy to use. It took me like 1 hour to get a nice custom development environment (also used for demonstrations, proof of concept, GUI candy, reporting, project managent - all open source !!!) going. *Tip 2: * if you can add a lot of value against low costs - do it! I used a simple starting point: virtualbox and made a FOSS powerkit that anyone can use. Of course you will need to know some about Xorg, Openbox, Awesome, Xcursors, Slim or any other DM/WM etc. But if you don't, feel free to use a simple Desktop Ubuntu or Fedora whatever you are comfortable with.
The last major simple thing I did, was putting the entire image inside Dropbox. Which makes tip 3 use the cloud! Any changes to the OS means that only those blocks get synced when the file is no longer in use: no more USB sticks, no more cat-ate-my-source-code :)
Sync this customized virtual machine (a development environment, test backbones, middleware or what not) up to a fully graphical Linux distribution (minimal X11 desktop ranges around somewhat ~1G I think). This works because:
Dropbox first syncs the file structure (folder tree and file names), then breaks each file into blocks and performs a [hash of each block](http://en.wikipedia.org/wiki/Cryptographic_hash_function). The hashed values are transmitted to Dropbox, which compares the hash values against its database of known hash values. If a hash value is not found in their database, its corresponding block is uploaded to Dropbox' servers.
This means it won't try and replace the entire 700M-2G Virtualbox disk image - just those parts that have been changed (running a operating system, in daily use, files are continuously changed throughout!) and due to this reason, you shouldn't expect any multi-user network based running virtual machine magic. What it does do, and does it well: share and synchronize and thus fully removes any requirement for running around with USB sticks and - even better - allows us to develop a more 'rich' and user-friendly environment for larger projects, stakeholders, and can serve as a platform for a common starting point (baseline) development reference (everyone uses the same versions of libraries and the Virtualbox host is made available for all platforms). Just remember:
If a file is open by more than one person at the same time, conflicts happen. (Dropbox doesn’t “lock” files like some local servers you may have used.) While Dropbox is fairly good at resolving these conflicts by saving multiple copies of the file and designating which copy belongs to which computer, merging the changes made to both files can often be tedious and annoying.
A very good article on the power (and weakness) of Dropbox as a collebrative tool can be found here.
Have fun customizing, just keep in mind - whatever works fastest and best for you is probably the thing you need to do ^^