
Development Process
*******************

We need to develop not just for ourselves, but for the legions who
follow us. This means following good development process to provide
transparency, maintainability and readability to what we're doing.


Coding Style
============

* Unix style: CRLF line endings

* No trailing spaces.

* No tabs: use 4 spaces instead.

* Bracketing style: use the style that's already there.

* You are not a compiler: code for readability, not compactness.

* We are open source: coding security-by-obscurity is not necessary.
  Use semantically sensible function and variable names.

* Comments. More comments. Still more comments. Nobody will know
  what your brilliant idea was when you wrote that gnarly piece of
  code unless you tell them.

* Commit messages. Commit discrete changes, don't munge six
  different fixes into a single commit. And provide a clear message
  (preferably tied into a Maniphest task/Differential diff) of what
  problem these changes address.


Making changes
==============


Before you begin
----------------

Found a bug? Got an enhancement? Great!

Something to consider before you leap in with a new feature: this is
an open source project. If your change isn't a basic part of what is
already planned, will you be around to support it? Can you justify why
it's in the best interests of the project to have your change
included? We'd love to talk it through with you: contact us via the
mailing lists.


Using GitHub
------------

First, check out our Guide to GitHub, which covers:

1. Create a GitHub account

2. Fork the repository

3. Clone the fork.

4. Branch the clone.

From there, you:

1. Take ownership of a GitHub issue (or create a new one to cover
   what you're planning to do).

2. Code code test test test code code test test test.

3. Use git to commit your changes.

4. Issue a pull request on GitHub

5. Wait for review (a quick note to the mailing list can speed this
   along)

6. Once approved, it'll be merged into the master.


Patches through the mailing list
--------------------------------

If you're not planning on regularly submitting changes, you can just
send your patch through to the mailing list and one of the regular
maintainers will see about incorporating it.


Useful Developer Information
============================

Some combined tips on developing with Cyrus have been collected.


Community Participation
=======================

Join us! The project is only as good as the sum of its people. We all
work together, despite the tyranny of distance and timezones.

Meetings are currently held online via Google Hangouts. Not sure what
time that is for you? Try the meeting planner.

There's also IRC and mailing lists.
