Approach / Methodology


Software development today has become a combination of a well-defined science coupled with craftsmanship. Time to market is crucial and rapidly developing a software product or service with significant quality and architecture is essential to the success of our clients.

In order to insure our clients receive rapid delivery and quality products we utilize a set of Best Practices that we have developed and refined. We have developed our best practices centered on the Agile Development Methodology. We implement our practices on every client engagement to insure 100% quality and satisfaction. The following illustrate some key areas in our best practices.

  • SCRUM with 7-day or 14-day sprints
  • Continuous integration, TDD, code reviews, pair programming
  • Project tracking and collaboration using Jira, Confluence, SVN, Source Code Control through private Git repository
  • Visible Project Management through JIRA
  • The code and demos are 100% visible at all times to our clients in private development sandbox areas
  • Daily and weekly reports and plans
  • Regular meetings via Skype/GoToMeeting/VOIP with minutes

Agile Development

Sphere has been utilizing and improving our agile development methodologies since the company's inception. There are many tools and techniques that can be used within the agile process and here at Sphere we utilize a combination. The key factor is that agile methodology allows our team to develop software in the face of vague and rapidly changing requirements and when working as an extension to client teams it insures flexibility.

Extreme Programming, or XP is our primary practice in leveraging our software engineering resources. Extreme Programming combines Test-Driven Development, Pair Programming, short iterations, and Continuous Integration, to radically improve software quality and flexibility while reducing time to market and cost.

There are several key values that illustrate why we are passionate about leveraging the Agile Methodology.

  • Individuals and interactions over processes and tools
  • Working software over comprehensive documentation
  • Customer collaboration over contract negotiation
  • Responding to change over following a plan

Besides the values behind the methodology, we feel that the benefits achieved through the Agile Methodology are significant:

  • It reduces costs
  • It minimizes bugs
  • It insures collaboration
  • It minimizes the chance of project failure due to poor requirements, unrealistic schedules or lack of testing

Test Driven Development

When we architect, engineer, and develop applications, we start by writing tests for every feature that will be implemented. The coding begins once the tests are in place corresponding to those requirements. The rhythm of writing a failing test, and then making it pass by implementing the feature, ensures complete test coverage, and a more reliable product.

Continuous Integration and Deployment

The system is built/compiled/integrated at least daily, and ideally whenever updated source code is checked into version control. Immediately after the system is built, which is often done in a separate "project integration sandbox" it is automatically tested.

When we check in our code, our automated Continuous Integration server checks the code out again, and runs all the tests, to make sure that the code will work correctly in production.

In the event that a build does not succeed (i.e. when tests fail in the Continuous Integration environment) the focus of the team shifts to repairing the build and ensuring that defects don't creep into the code base.
We continually deploy new features to a private demo environment, so that our clients can see the new features in a near real-time. This affords our clients the opportunity to immediately begin user acceptance testing to insure their expectations are on target and that the product/service behavior and functionality is desirable.

Short Sprints

We keep our development cycle to one week iterations. This keeps features from drifting out of control, and gives quick feedback on each new feature being developed.

Refactoring

As programmers add new features to the project, the design may start to get messy. Refactoring is a disciplined technique for restructuring an existing body of code, altering its internal structure without changing its external behavior. Its heart is a series of small behavior preserving transformations.

Behavior driven development (BDD)

BDD focuses on exposing internal logic (typically business rules) to review by stakeholders. Behavior-driven developers use their native language in combination with the ubiquitous language of domain driven design to describe the purpose and benefit of their code. This allows the developers to focus on why the code should be created, rather than the technical details.