= Getting Involved

Getting involved with Aries is easy.
First, any help is welcome and we welcome you on board.
Here are some suggestions for how you can get involved in Aries:

* Take a look at the existing modules   to identify what areas you are interested in.
* Take a look at the http://wiki.apache.org/incubator/AriesProposal[Aries proposal]  to see if there are things there that you are interested in but we haven't created subprojects for yet.
If you're not sure whether something is in scope for Aries or not, send a mail to the developers [mailing list|MailingLists]  and ask.
* Try out the link:/documentation/tutorials/blueprinthelloworldtutorial.html[tutorials]  to get a feel for what Aries is about.
* Subscribe to one (or more) of the link:mailinglists.html[mailing lists] . If you want to get involved as a _user_, subscribe to user mailing list.
If you want to get involved as a _contributer_, in the development of Aries, subscribe to the developer list.
* Help answer questions posted to the user mailing list for areas that you are familiar with.
Your real usage experience can be very valuable to other users as well as developers on the project.
* Would like to get involved in development?
Have new ideas?
Start with the mailing list and share your thoughts.
* Contribute to feature development.
Just let the community know what you'd like to work on.
It is as easy as that.
* Identify https://issues.apache.org/jira/browse/ARIES[JIRA] s and browse the https://svn.apache.org/repos/asf/aries/trunk[source]  in the area that you are interested in and provide patches.
* If in doubt about where to start, send a note to the mailing list and mention your area of interest.
Any question is welcomed.
We'd like you to be involved!
