How We Work

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.