User:Fate/Becoming a developer

From The Mana World

Since this question keeps popping up, I've decided to put together a brief summary of how (in my experience) someone can become a developer in a Free Software project. Note that different projects have different cultures, so this advice may not be universal.

As developer, your goal is to maximise your use to the project within what your real life constraints and obligations to other projects allow. Keep this in mind for all of the following.

Background

First, make sure that you are familiar with the project's

  • aim
  • principal communication channels
  • organisation
  • technical choices

The last two points, organisation and technical choices you need only understand as far as needed for actually interacting with development.

Starting out

Free software developers must be self-reliant. If you have an idea, chances are that nobody will like it until you've finished implementing it (people are silly like that.) If you are just starting out, you cannot expect help from the existing developers.

Try to follow the following rules of thumb:

  • Figure things out on your own as much as possible
  • Manage and sanity-check your ideas
  • Allocate time
    • To learn
    • To implement

Figuring things out

  • If you can google for it, don't ask about it.
  • If it's documented, don't ask about it, unless it's broken.
  • If it's not in the project's best interest, don't even consider it.

Managing your ideas

  • If you think you have a good idea, write it down for yourself first.
  • Check: does this idea introduce security issues or other exploits?
  • Check: is this idea actually useful (or entertaining, for a game)?
  • Check: is this idea usable?
  • Check: does this idea really add something new?
  • Check: does this idea integrate well with the rest of the project?
  • Check: does this idea integrate well with the project's aim and projected plan?
  • Check: is this idea technically feasible?
  • Check: do you have the resources to implement this idea yourself?

You can try to answer these questions for yourself or talk them through with your friends. If you are just starting out, try to rely on the existing developers' help as little as possible. If you need other people's help, make sure to ask for help politely. Don't waste your time on ideas that you cannot implement yourself and that you cannot find help for. As for requesting help, remember:

  • Don't expect anyone to do your work for you, ever:
    • Let me repeat that: implementing things is hard work. Don't ever expect people to do hard work for you for free. No matter what you may think, you are not that brilliant.
    • If you want an idea implemented, show that you are serious about working on it yourself.
      • Don't repeat yourself or go into unnecessary detail.
      • Do check your idea, read up on technical aspects you are not aware of, build prototypes, draw sketches, criticise yourself and revise your idea.
      • Acquire the skills needed to make your idea a reality.

Learning and Time Management

Free software development is mostly about learning, especially at the beginning, so be prepared to learn new languages, radically new ideas, and new techniques in tools that you have been using for years.

Remember:

  • The first revision of anything you try will usually be horrible.
  • The second revision will usually be too bad to be practical.
  • The third revision may or may not be good enough.
  • At any time you may find that you did something very silly and need to read up and start over from the beginning.

Make sure to allocate a lot of time to accommodate for all of this.

Joining the team

Now that we've covered the basics, how can you join a Free Software project's team? The most important thing is to show that you are indeed useful to the project. If you have programming skills, solve an existing problem or limitation of the project using your skills and submit a patch. If you have writing skills, try to see if there is something you can write for the project. If you have pixelling or drawing skills, produce some graphics that may help the project. If you don't have any of these skills, try to acquire them.

If you don't have any skills nor time to acquire them, then test and submit bug reports, or try to answer newbie questions that you know the answers to. This last step will not make you a developer, but it will give you a starting point in case you do manage to find time later on. Also, you help the project by freeing up developer time, so that's a good thing.