Tales from the code mines: No. 3

Kwalee programmer, James Munro, discusses Continuous Feedback.

Due to the ever changing nature of the competitive app markets, its essential that as a development team we are able to quickly develop and iterate on game and app ideas. In more ways than one, we are still learning and improving our core development methodology, however we have been quick to establish some key principles.

In the early days of the company people would be queuing up at my desk or Nick’s desk on a regular basis in order to receive the latest development build of our current game. While the company was in its infancy this was just about manageable, but as new members of staff joined this became a time consuming task. However, its important to keep these people in the loop – we do want them to have the latest version, its great to hear their feedback and keep everybody informed of recent developments.

There’s a notion in the programming world (I’m not quite sure of its origins), that if you have to manually perform a repetitive task more than a couple of times you should probably aim to automate it and save your time in the future. So that’s exactly what we did. With the help of Jenkins, a popular open-source continuous integration server, TestFlight, an excellent over-the-air (OTA) app distribution service and some Python scripts to glue it all together we have been able to fully automate the development distribution process.

So now, when a developer commits to our SVN trunk folder for this project, Jenkins spins up and compiles a development build of the app and performs some initial pre-compilation validation on the project. The app is then compiled and assuming the build is successful, the resultant binary is code-signed with a valid provisioning profile and subsequently uploaded to the TestFlight service which takes over the final part of the process: notifying our registered test users that a new build is available and delivering this OTA to their devices, regardless of whether or not they are in the office.

The advantages of this are absolutely fundamental to our development methodology.

  • Testers, management and friends of the company have the latest build of the app.
  • We can receive prompt feedback and quickly incorporate these back into development.
  • Thanks to TestFlight, symbolicated crash reports are available in addition to session logs. On-device bugs can be squashed quickly.
  • We can also receive in-app feedback which could be crucial for quality assurance.

This configuration has already proven itself in real-world scenarios. On several occasions we have been able to incorporate feedback from development builds within a short period of time, sometimes just a few minutes. We can then distribute a new version amongst our team and see the results of our changes. We have a solid backbone to our development methodology, and with continuous feedback the quality and velocity of our apps is increased. The hard-work doesn’t stop here though – we are always looking to improve this foundation and incorporate new ideas and technology into the process.