Since the very beginning of my Flash coder career (at the time actionscript didn't even exist) in 2000, one aspect I always loved about this tool is the possibility to mix in one environment both the creative/design side and the technical side of a project.
During the following years many new features were added, expanding continuously its creative potential and it became the de facto standard in web development
Alongside the evolution of the tool, also the role of the flasher changed from a "do it all" developer to many different specialized roles.
Among those there is also the role I play in my daily work, the coder.
Today projects such as the ones featured on the FWA are the result of the work of teams that mix the capabilities of many different professionals such as creatives, art directors, designers, animators, producers and obviously (at least for me and for the topic of this article) coders.
From such a team great creative ideas are born that can push Flash to the limit of its possibilities and are for a coder a big challenge.
Every new project is a new experience and an intensive learning process that requires often to bring new solutions to never seen before problems. Often there is no documentation about the problems the coder is experiencing and the only possible way to solve them is experimenting, looking for the best approach.
The coder's role
The Flash coder role is to transform the idea into something real and fully functional, putting together all the media produced by the team, trying to reach a result as close as possible to the initial concept, integrating and controlling them so that the site will work smoothly.
The level of consistency with the original idea depends on a series of key factors.
One of the most important is how "crazy" and hard to make is this idea.
Sometimes creatives can conceive situations and related interactions so complicated that it may be necessary do simplify them to avoid facing some problems related for example to excessive resource usage on the client computer or (and this is another key factor) because there is not enough time or budget to develop them completely.
It's all about challenges, great minds and nice people
There are different challenges to work with each component of the team, depending on what is his role; sometimes the same person can also play 2 or more roles, depending on the project.
Being the guy that puts together all the pieces, I need to get to know the basic aspects of the work of every component.
Working with creative people is often the more complicated part of the collaboration with the team.
There is always that "love and hate" feeling a coder, with his precise and logical mind, has for the unpredictability of the "opposite side".
Hate for illogic and crazy ideas hard to be ruled out in our code and love for the challenges that transform the very same ideas in a working site mean (after all you can't be a good coder if you don't love challenges).
Of course it's not real hate and after the hard work we all are happy for the nice result we achieved.
I have to say that I always appreciated working with creatives, I'm really envious of their capabilities.
With animators and designers even with all the big differences in our work, there are much less problems and discussions are usually related to what solution may be better to use to have smoother animations, effects or anything is needed in the site, where to use code or timeline animation.
Then there are the other tech people involved in the project, either other actionscript coders or other language programmers for both the server side and the client side.
Being all geeks we all speak the same language, often unintelligibly to other people. They are also the people with whom I discuss when I'm facing big coding problems to solve, relying on their experience that is always helpful.
Producers are the ones I talk with more because of their role of keeping together and on track the team and staying in contact with the client.
Discussion is often about the situation of the development and about time estimates, trying to be on time for deliveries.
They are also the ones that are always there, with their continuous presence, especially during the last steps of the production when often all the work is only in my hands and I'm putting together all the parts for the final delivery.
Everyday I feel happy because I can work, discuss and learn with these great minded teams and, more importantly, nice people.
Relationships with these human beings is one of the great pros of this hard but satisfying work, my big thank you goes out to all of them.
But what does a coder do exactly during the development of a project?
During the early stages I give my contribution looking for the best technical solution for the problems the project we're going to develop could have, I suggest creative ideas based on my past experience in interaction development, I give my opinion about which animations would be better to do with code,
I estimate the development time.
It is also the time when I check if it is possible to develop some extreme code required by the project and in case it's not a viable option, suggest some good alternatives.
When the project gets approved by the client the real production begins and I choose the architecture I believe will fit better its needs.
I build the first code prototype making it as more open and generic as possible, and work with the creatives, designers and animators to find the right approach on every aspect of the site.
That's the time of long discussions about how to find a good usability, a cool interaction, amazing animations and everything the team conceives.
Then comes the moment to produce all that was planned before for real, so it's time to design, animate and, in my case, code, code code. I spend the great part of the day programming and reading documentation.
Meanwhile the first animations start to come from the rest of the team and I begin to change them, sometimes heavily, to make them ready to be controlled by actionscript. I mix those animations with the code generated animations and slowly the site begins to come to life.
The creative process is a continuous evolution and this means the initial code planning I made will be soon outdated and I start to adapt it to new requirements.
Being able to create a code that is easy to adapt to these changes is very important. Anyway no matter how good I could be, it's very likely at least some of these situations are something I didn't think about at all!
Nearing the delivery date
As the delivery date is approaching the hardest part of the project life for a coder is starting, it's time to put together all the work of the team and finish up the site and it's very probable that at least one of the elements of the production chain will be late forcing me to be late too.
So I have to work very fast and often work long nights to be able to finish in time; no time for accurate planning of the code, I just look for the fastest, easiest and most reliable solution to any problem I encounter, balancing its pros and cons, knowing I will probably have to clean and optimize it later.
This situation can lead to potential bugs so I need to be also fast to find and fix them.
And the delivery day comes pretty quickly and it's time to deploy the site online and start the final debug.
The time required for it can vary a lot depending on how big and complicated the project is.
First come the more obvious bugs, the ones you can find easily and at the same time I optimize all those things I had to left behind.
At the end of this process the site is ready to go live (and ready to be submitted to the FWA :P ) and immediately some minor bugs will start to be found (especially when the project required a very complicated code) and it may require to deliver one or more bug-fix updates.
The project is now complete and it's time to get ready for the next challenge!
Nice story, but...
What aspects are more important in a coder?
During the past years I developed some rules to follow that help me to work better and to improve myself.
Or maybe it is just the way I see my work and the reason I love it.
Love for challenges
You'll face many challenges, get ready for them, Study, read documentation, and find out how other people have the same kind of problems, then have fun experimenting and try to find your own approach.
Even if no one faced the same problem with flash before, it's very probable you'll find something for other languages, learn from that and see if you can do the same thing.
Enjoy being pushed to the limit, because it's the best way to increase your skills.
You'll be asked to change the same part of the site over and over in many different ways and then to change it back again to the very first version, just to find the nicer result.
They (usually the creatives) are not asking it just to bother you, just to make a great work, and often you won't agree with the final choice.
Your work is to help the team to reach the best, do it, don't complain.
You are in the advertising industry and it is well know for its crazy rhythm. Be prepared to work a lot and at impossible working hours.
You'll be under pressure and in a rush continuously, you better love your work and be willing to spend a big part of your life doing it.
Give always your best, it will pay with better results.
Acceptance of your limits
You aren't and probably never will be a code guru; you have to live with it.
It will happen that you won't know how to solve a problem, try a different approach, try to make it simpler. If there is no solution, discuss it with the team, the creative idea can be changed to something you can do or if it is mandatory maybe you can get help from a better coder than you, don't miss the opportunity to learn from him or her.
Accept your limits and push your skills to a higher level every time you can.
About the author, Mario Ballario
Mario Ballario is Co-founder and Lead Flash Developer at magicsocket in Torino, Italy.
magicsocket is a small interactive agency specialized in interactive advertising campaigns and web sites design and development.