1. Did you do anything to protect yourself from being sued by a client, like forming an LLC or carrying liability insurance?
Yes my wife and I have an LLC so personal assets are protected. I also pay myself a salary as president of the company and pay taxes quarterly. This avoids a lot of issues with tax red flags as some years we make a lot more money than others and have employed other developers on bigger projects. I have had liability insurance in the past, (it was actually required on a couple of government bids) but generally it wasn't worth the cost because I was getting most of my work as a 3rd party (hired through an established dev shop with their own insurance). I think in your situation starting out it would probably be a good idea to protect yourself with insurance, but as you become more established or depending upon the contract work it may not be needed.
I was thinking of joining a freelancing site as a starting point. I figure that once I start to build a reputation, I'll make my own website and raise my rate. Does this sound like a good approach? (I'll also take some of jsloan's excellent advice - thanks!)
I think this sounds like a great approach to get your feet wet. As your skills improve don't feel like you need to settle for 3rd world rates. On a lot of freelance sites you will have a lot of international competition, but that doesn't mean you can't make some good contacts and learn a lot. Doing work at a reduced rate would be great to build up your portfolio as well.
At my old job, every project went through two rounds of code review. On complicated projects, we were almost always able to find some errors in each other's code - another set of eyes really helps. I'm concerned about how I'll write extremely robust code without the benefit of another perspective. Any advice on thorough/systematic testing?
In corporate world sometimes code reviews can be opportunities for other programmers to nitpick another programmers code without adding much value to the software itself. Code reviews can be very helpful to establish coding standards, best practices, etc within an organization but I'm not entirely sold on it being a great exercise to produce great software. Code reviews are not a necessity, testers/QA people are.
As part of my quotes I always include time for testing and I assign hours estimates for testing. This forces the client to realize that testing is an integral part of the project. In most cases I encourage the testing time to be done by an internal resource who will eventually become a system admin. This has 2 direct benefits: 1.) an internal resource has an understanding of the inner workings of the system BEFORE go live so it will be an easier transition once the programming is complete and 2.) you have another set of eyes using the system and identifying bugs, issues, new features, etc. If the client does not have a qualified internal resource you now have some hours to outsource testing to someone else to help you test (maybe you wife :-)).
Lastly you can always write/generate your own unit tests to test code for things like null values, negative numbers, etc, but nothing can replace good testing.
A good read on testing:
http://www.joelonsoftware.com/articles/fog0000000067.html I have a lot of experience with C#.NET and Windows Installer, but I'm also a quick learner and can pick up pretty much any language or technology. I can't decide whether it's better to market myself as a specialist or to cast a wider net.
C# can get your foot in door with a lot of different projects since you could do anything from web/mobile development to games and desktop software. At first, I would recommend bidding on some projects that you feel comfortable you could accomplish without much trouble from a technical standpoint. A small desktop app or easy web app would be my recommendations. This will allow you to get a feel for the way that contracts work without also feeling overwhelmed by the project and get used to the business of contract work. Contract software development is 50% technical 50% social and a lot developers don't realize this when they start out. I think a lot of experienced developers will jump to contract work and take on big projects while glossing over a lot of the business details like managing hours, dealing with clients and billing.
Hopefully I didn't ramble too much, but contract work is a great way to earn some extra money on your way to FIRE. Good luck!