Since leaving the guys at WAI in June '09, I have followed a more open working lifestyle. The last 6 months have been pretty awesome both professionally and on a more personal level. In relation to work I have been able to participate in a variety of exciting projects which have been more in line with the kind of work I wanted to concentrate towards. During this time I have been exposed to a number of topics I feel are important to anyone considering the freelance life.
One of the first questions many people ask be about my freelancing is how experienced and skillful they feel you need to be in order to become a freelancer. Skill sets are obviously fundamental to the work we do, and alongside an indepth working knowledge of your toolset, I've also learned to acknowledge how others work to produce the same results. When working at my previous agency, we did little more than use the Flash IDE with FlashDevelop with PureMVC as the framework of choice.
Lessons - Learning from People's Mistakes
As any good developer many lessons learned will be from the misfortunes of other. Many of the roles I've undertaken have been bug fixes in applications built by others. These may seem like the projects from hell, but in many cases I have learnt practices which I now use as a standard in my work.
The biggest offenders appear from developers using 3rd party libraries and frameworks without an understanding of how the fundamental principles should be practiced. When I first learnt PureMVC for example, I started with small examples which I could easily adopt to my own projects. Building upon each project, as size and features increased. Stories I have heard of include people using Cairngorn to build a video player with two buttons and an flv component and passing display objects round a PureMVC application within notifications. After some fundamental homework it's pretty simple to work out at which level to introduce a framework and how to use your chosen one.
A common problem I run into in the flash industry is the use of deeplinking. At the start of any project it is important to address any potential features that may not be listed in the initial specification but could be considered of value in a project. No one enjoys trying to plug deeplinking into a complex application at the end of of a project, so why not just add it in as your central navigation system from the beginning? Even if it isn't required, the library will still work without the external interface required to handle the external side of things.
This leads me to another topic, selecting the right tools for the job. I have learnt that the industry standard is pretty much PureMVC in terms of solid MVC frameworks, and this is something I've seen adopted by all of the agencies I have freelanced in. This is isn't to say that this is necessarily the best option. With every project it is important to consider a number of factors, time frame, localisations, future development - not neccessrily by yourself . Where as before I only really knew how to implement PureMVC, I have since learnt PureMVC Fabrication, RobotLegs and GAIA. Each have they're own benefits - which is another post just there, but remember the common practice isn't always the best.
Some of the good practices I have discovered can be summarised into...
- External Libraries - Using external libraries which are loaded at runtime allows you to save your main application for pure code, even loading a prelimiary library to handle all preloader assets. Once completed the application displays the preloader whilst other assets such as the main library, xml and css load into your application.
- ANT Builder - Having compiled in the past from the IDE or as a pure AS project I had never had to use ANT scripts to build my actionscript projects. I know freelancers who still have yet to be greeted by a project built using ANT but have to say it does make handling various builds a great deal easier, when it can all be done from inside Eclipse/ Flex.
- CSS - In the past I never really had to handle a great deal of translations, and certainly nothing more than a few changes to the xml files and font library. In a recent project we were required to handle translations for over 15 countries, many of which used different fonts. This was one of those projects where you notice the importance of a feature. With CSS we were able to edit the fonts externally, and in minutes as opposed to a couple of days.
Staying up to date and New Technology
When freelancing it is important to realise that no-one is neccessarily watching your back and you will have to accept that you are in control of your own learning. It is important to stay up to date, agencies will not be spending their resources teaching the guys who only come in for a fews months each year. Blogs, RSS feeds, Twitter and industry editorial are an important part of any freelancers routine. For example every morning I check the news like anyone, alongside a number of industry sites, followed up by a visit to my google reader account once or twice a week to check up on my RSS subscriptions.
So there's my take on freelance life. Just as with starting a new job anywhere, there will be quicks lessons you need to learn, but with a good understanding of the fundamentals and industry awareness you will make yourself a better developer because of it. Once you have the first few contracts under your belt, the initial apprehension will go away. Combined with a work shedule to suit your plans (for the summer and ski season), and the time to carry out your own projects, it's all a pretty good deal.