We are to our core agilists, focused on building software of the highest quality through predictable, sustainable methods. We don't subscribe to the dogma of a single all-encompassing approach but instead we adapt to the needs of the project, the organisation and the people we are working with. For us, process is all about context: The precise how in how we build software is really dependent on what you are building and who you are building it with.

If your organisation is new to software, we will guide you on your journey and make things as easy as possible. Equally, if your organisation understands software development and has a preferred way of working, we will adapt accordingly, although we will insist on retaining our key engineering disciplines and agile principals. We don't cut corners and we will not cut on quality.

Building great software requires close collaboration, transparency, honesty, discipline, curiosity, experience, expertise, and hard word. Some of these things you can capture in a process, some you can't. Below we have tried to capture the essence of our baseline approach and of our values.

Discipline

We are practical, pragmatic and adaptive but we are also extremely disciplined when it comes to doing the simple things. Continuous integration, clean code, code reviews, automated testing, quality assurance, etc are all baked into how we work. For us, these are non-negotiable disciplines, ones that we take very seriously. They form the basis of our engineering culture and our approach, including how we do agile and how we consistently deliver quality.

Clean Code

Discover

All our projects kick-start with a collaborative discovery workshop, the purpose of which is to clarify and refine our mutual understanding of the system being built (the shared vision) and to create an initial 3-month development roadmap/plan. Discovery will typically stretch beyond initial face-to-face meetings but its actual length will depend on the size of the project and the agreed outputs from the phase.

Discovery outputs can include:

  • Delivery themes condensed into high-level epics
  • Identification of key personas and system stakeholders
  • Paths that will result in biggest positive impact to the business
  • Backlog in form of user stories and detailed requirements analysis
  • Prototypes to mitigate risks of unknowns and complex challenges
  • Initial UI wireframes (PDF or point-and-click demo)
  • Solution architecture including technology stack
  • Delivery plan, including milestone and release plan, resourcing, etc
  • Communication strategy (see below)

Iterate

We develop software iteratively, over multiple mini-release cycles. Each iteration (or sprint) compresses planning, coding, testing, QA and release of working software into a 2-week block. Sprints start with a planning session to create a backlog for that sprint and end with a demo of working software. Future sprints are shaped using feedback from previous sprints and current backlog priorities.

Once the initial 3 month plan has been completed we then repeat the process. Subsequent 3-month cycles start with a detailed planning session to estimate, prioritise and map out goals for the next 3-months. And each cycle ends with the same output: the release of working software into production ready for commercial use. For more complex projects we may undertake some additional discovery to mitigate risk and uncertainty, but only when necessary. The key thing is we adapt our processes to work for the project, not the other way round.

Agile

Communicate

One of the key outcomes of discovery is a communication plan which specifies how and how often team members communicate. Our preference is for as much face-to-face communication as possible but we also recommend putting in place a number of other communication channels between all stakeholders. As a baseline these may include some or all of the following:

  • Google Hangout or Slack for instant messaging
  • Telephone and then email for more formal requests
  • Jira for raising issues and documenting user stories
  • Confluence or Gitlab Wiki for documenting shared information
  • Daily 5 minute standups for quick verbal information sharing
  • Weekly reports for documenting progress
  • Bi-weekly (all-hands) demos to present progress

Shared Vision

Here's the thing - process alone cannot guarantee success. Great software is created by brilliant, dedicated people who have the insight, experience, and expertise to deliver amazing outcomes. And true success is only possible when all stakeholders are aligned behind a clear, shared vision. We firmly believe in the concept of a single team; client and customer working together towards a common goal, focused on building software that transforms and improves how people live. It's a simple philosophy but it underpins everything we do.