Our Development Process
Our agile development process borrows from many sources (including
the "Pragmatic" approach, Extreme Programming, and others), and adds
our own distinct elements. Among other things this means that:
- We are highly customer-centric. Meeting the customer's needs by
delivering working software regularly is our highest priority.
- Our development is test intensive; some code is written
test-first.
- We implement features and systems incrementally.
- We work a reasonable quantity of hours each week.
- While we work hard to discover the customer requirements before
implementation, we embrace change. Change is not the enemy, rather
our ability to deal with new requirements effectively is a
competitive advantage for our customers. We win customers away from
change-averse organizations.
- We check in working code frequently, and usually integrate our
work on a daily basis.
- We refactor code as needed, which means that we enhance the
design of existing, working code to prevent software entropy.
- We take internal and external quality seriously.
- We vigorously remove duplication in code.
- We write code with short, well named methods and classes.
- We practice Pair Programming occassionally, to build a shared
understanding of problems and solutions.
- We follow coding standards, and help shape those
standards.
- We don't stay pigeonholed in one part of a project; we each
learn about many parts of a project, and multiple projects, over
time.
Our Developers
In addition to the above, Oasis Digital developers do the following things:
- Communicate effectively with our customers... in person, via
phone, and in writing.
- Read and understand specifications, even when they are
incomplete.
- Ask questions where clarification is needed, but also make good,
domain-based assumptions where appropriate.
- Compare specs to running software, noting what is not yet
implemented.
- Keep track of what items of work need to be done; manage our
own work queues.
- Write test cases (usually in code, not in documents).
- Work closely with other developers.
- Take responsibility for making features and projects work.
- Solve Problems in a resourceful manner.