Flash Indie Developer Part 1: Check your talents and skills!
For every project you should check your skills before you start. It helps a lot for preventing possible problems and makes the life easier. Thus I highly recommend to do a self-assessment before your start as a Flash Independent Developer. After this self-assessment you should have a very clear picture about your abilities, skills and of course your weaknesses. It is very important that you know your weaknesses because you can outsource some of this problems to your network buddies. An independent team-oriented working approach works in this case very well, because it replaces your weakness with a strength of another person. It works like the Captain Planet or the A-Team metaphor 😉On the mindmap you can see the 4 core skills: Design, general knowledge about New Media, Programming (Computer Science) and soft skills. As an employee it is not so important that you have skills in each of these core skills, but as an Independent Developer you have to be an allrounder. gSkinner wrote a nice post about the must-have qualifications as a Flash Developer. I would like to add the points doing project management and creating networks to this list. An (Flash) Independent Developer has to be fancy to do project management tasks and get in touch with other people. If you don't like it, then you should not become an (Flash) Independent Developer! But I think the completely different charakter of the tasks make the life of an (Flash) Independent Developer so much more interesting.
Development & Programming
For me is programming != programming and developing != developing. There exists a lot of difference. All subject which has to do with code belongs to the subject of programming, the other stuff, for instance, defining my personal workflow, defining my testing approach, dividing my complex tasks in smaller issues etc. belongs to the topic of software development.
When you write code it is important, that this code is well structured. So you have to know and use(!) the advantages of an object-oriented programming language. Your code have to be clear structured and well readable. Coding conventions helps a lot in this case. So take care about this conventions for every language you will use. Furthermore the most projects requires more than one kind of a programming language. So you should be able to use a client-side oriented programming language like ActionScript and a server-side oriented programming langauge like PHP or Java.
I have already mentioned it above, finding a good object-oriented structure is absolutely an essential requirement for your apps and games. You don't must be a Senior Software Architect or Software Engineer, but a basic understanding of Design Patterns simplifies your future life. Because you will be able to reuse code fragments, management of old code becomes easier and more stable, and you can offer very easy different versions of your software (e.g. Lite and Premium Versions). Or you sell some parts of your applications as components at the FlashDen marketplace. There exists some more use cases where object-oriented structure makes a lot of sense!
Project Management and Software Development
If you want to realize a bigger project (over 1-3 months or longer), it is essential that you know some basic project management tools for Software Products and some basic workflows principles for Software Development.
Personally, I prefer Scrum or Agile Project Managment methods for bigger projects. I like the approach with the user stories and the sprints. And of course comparing your time with the schedule. If you are new in this kind of topic you should read some articles about creating user stories and sprints or just read the Head First Book about Software Development.
The same recommendation is valid for the basic workflow principles. Using a Version Management System for your programming code is absolutely obligatory. There exist some nice (free) services for this issue, for instance, Google Project, assembla or GitHub. The other big thing for me is Test-Driven Development. In my mind if you use this kind of programming method, you will benefit from a better quality and stability of code. But sometimes it needs to much time and the initial training is not so easy. Especially for small projects it makes not a big sense. Therefore I propose to use this kind of development approach only for your library or framework classes.
Design plays a big big role for digital products. But Design is very far reaching and vague word. When you are talking about Design some of you mean just Graphic Design, the other one means Interaction or Interface Design or something else. I don't care about what special discipline of design you are talking. The only thing I surely know is, that you must understand the whole bunch of design discipline. That means you have to know some stuff about creative techniques, for instance Brainstorming, Roleplaying or Six Thinking Hats methods. You can use these methods for finding new ideas for your games or applications. In my mind creative techniques belong to the base knowledge of all design disciplines!
After this more abstract creative process you have to visualize your product. Every product presentation needs a nice face. So you must have knowledge in the topic of User Experience, Information Design, Interaction and Interface Design, Game Design, Motion Design and at last Graphic Design. Usually, it is almost impossible to have great skills in all of this design disciplines. Maybe you have some talented designer in your network, who can do some stuff for you. In return you can do some programming stuff for him or them! If you are not able to outsource some tasks which you are not able to do, please buy a book for your self-study in this kind of topic.
Everytime take care that design is a unique selling point for your products!!!!
Soft skills and general knowledge
Uh soft skills is such a big buzzword in Germany... I don't like this word. For me it is not possible to learn soft skills. I think, soft skills are directly related to your personal life experience. The best approach to improve your soft skills is to do a long term trip at a foreign country or do something, where you must be act independently (as an Independent Flash Developer 😉
Anyway, you should create a network with your friends or some other colleagues. So that you can support each other. That is very important! Or participate in some special online communities and gain the friendship to the members of this community. Try to talk at some conference and User Groups or do something else! The worst thing you can do is nothing! It makes so fun working together with friends and other people, who supports each other!
Furthermore, didactical skills also belongs to the subject of soft skills. I have enumerated a lot of technic-based knowledge above and this knowledge could be very useful for other people, too. So it is quite possible that you can teach people in this kind of stuff. Read the blog article Getting Involved in Higher Education by Tom Barker. I completely share his view in this subject. I did the last 6 years some snowboard courses in the Swiss and Austrian Alps. In this time I learnt a lot of snowboarding and about myself(!). So if you don't have problems to speak to a smaller audience, you should do some lectures at schools, colleges or something similar. Additional to the already mentioned points, being a teacher delivers mostly a nice stream of income. Especially, if you have a creative trough and your are unproductive at the moment.
O.K. the name general knowledge is not so well chosen from me. What I mean is some general knowledge about the economy of the new media branch. You have not to be an expert! But you should know how this branch works and how you can identify some new trends in this area. That 's all!
You can see, you have to know a lot of stuff. But I think if you have got a good education in this new media stuff, then the most points are familiar for you. It is very important for you, that you know where you have your strength and talents. Use these abilities and improve them. At the same time analyze your weaknesses and try to find people in your network, who is/are able to solve your weaknesses a lot of better than you. After this step of self-assessment, you will be a step further in becoming an Independent (Flash) Developer 🙂