Saturday, August 29, 2015

Computer setup for IT Freelancers

I've been freelancing for the past 4-5 years and I am currently making 6 figure USD net doing it. The main reason I can maintain this type of cash flow year-round is working on multiple projects plus keeping a short-list of good long-term paying clients happy.

One of the main challenges I've had in managing multiple very-demanding software projects at the same time is QUICKLY switching between them and I don't mean the mental boot time required for each switch; I mean setting up the complete dev environment for each one each time you need to do/check something bearing in mind that the complete environment for this type of projects is not simply an editor and a couple of auxiliary apps in the background. I am talking 5-10 active windows (depending on project) that need to be consulted at the same time in order to make progress.

So, how do you do this EASILY? Doing it manually is too time-consuming and irritating, writing scripts that do it is also annoying because the setup changes quite often and using a Virtual Machine per project, although a better solution, stumbles on various performance and hardware access/compatibility issues - especially if some projects involve low level API access or driver work.

I have concluded that the best way to do this is to have multiple physical machines and use one for each major project you are working on (currently in the process of implementing this type of setup). I typically work on anything between 3 and 5 concurrent projects and although 5 laptops would be ideal, practically speaking 3 laptops should be enough. Laptops would be connected to my desktop (wireless mouse & keyboard plus external Hi-Res monitor) via a quality KVM switch.

In case someone is wondering, I would use laptops and not desktops for this setup because of space requirements plus the ability to take some project's laptop with you and work on it while away for a couple of days - longer times away would require packing your best laptop and working on multiple projects on it in absense of a better solution.

Now, if you couple this solution with 1) a good online source code management solution like https://bitbucket.org/ and 2) a good local data backup solution (like http://www.duplicati.com/) , you have the core of a good office computer setup for IT freelancers.

So, three laptops all connected to your WiFi based LAN, a NAS box where Duplicati clients on each laptop save daily data backups, your code and other important project files also remotely committed on bitbucket and then fast switching between them using your KVM switch. Simple, redundant and efficient.

Tuesday, August 25, 2015

.NET remoting

.NET remoting, although an old technology, is a fast, robust, reliable and very easy to use way to instantiate new, or access already instantiated objects, in a different/remote .NET based process.

https://msdn.microsoft.com/en-us/library/ms973857.aspx