Orange shelves.jpg
postits.jpg
Light bulbs.jpg

Our Development Principles


SCROLL DOWN

Our Development Principles


Treating software as a craft

For us, speed, consistency, quality, focus and user-centricity are the main attributes we think about when trying to improve as software developers and get things done. We care about code quality, code style, test coverage, readability, maintainability, robustness, delivering on time and delivering the right thing.

Speed

Tech preferences
Project templates
Automation
Re-usable code
Open-sourcing

Quality

Complete test suites
Tackling technical debt
Group-led decisions
Staging environments
Exception handling
Monitoring

Consistency

Our agile process
Continuous delivery
Git branching
Sign-off and release
Style guides

 

User-Centricity

Teamwork
Research and design
User testing
Analytics and feedback
Incorporating the tech perspective
Regular releasing

Focus

Clear processes
Documentation
Design patterns
Retrospectives


Speed


As an agency, we have a need to deliver to our clients. Therefore, we want to work quickly but without sacrificing quality.

Speed


As an agency, we have a need to deliver to our clients. Therefore, we want to work quickly but without sacrificing quality.

Pre-defined language, framework and library preferences

There are an incredible number of languages, libraries, frameworks and technologies out there and they're increasing in number all the time.

This site is where we'll document for ourselves the technologies we like and use often, as well as listing the choices depending on the intended purpose.

Automation: setup, provisioning, DB migration, testing and deployment

If you do something twice or three times, automate it. It makes sense. We setup, provision, migrate DBs, test and deploy stuff several times each week so automation doesn't just make sense for us - it's a necessity for the way we work.

We're big advocates of Continuous Delivery as an enabler for more agile methods of working. More on that to come soon.

Project templates

We're lucky in that we get to work on greenfield projects a lot. As we do it a lot, it makes sense that we make it easier and easier to set up new projects and specific dependencies.

Here we'll document specific templates, what they're used for and what those projects will come with, out of the box. We'll also discuss how we use automated provisioning systems like Ansible and how we can re-use provisioning code to enable us to get specific databases or indexers up and running in minutes.

Re-usable code

If something's worth doing, it's probably worth doing again. In that event, you'll often benefit from looking back to the original code to get some ideas or to wholeheartedly copy chunks of it. To make that work well, it's often a good idea to turn useful code into a library and open-source it.

Read more

Open-source code

We make use of a lot of open-source software to do what we do. It's only fair therefore that we reciprocate and package up anything that might be more generally useful to the wider public.

Read more

 
Orange shelves.jpg

Consistency


Consistency


Our agile process

We take agile and lean development principles to heart. Although we thoroughly document the process here, it is organic; we'll attempt to ensure it stays up to date whenever there's a change in how we do things.

Read more about our agile process

Continuous integration and deployment

 

Git branching strategy

Working as part of a team of developers, we definitely need some consistency between how we commit, describe and merge our work together, as part of our complete development process.

Read more about how we use git

Sign-off, release and deployment strategy

Code is worthless until it's actually released to the public (or the client). But quality can suffer if it's done in a hurry and before everything is ready. That's why we've documented the procedure so that we can get this part as tight as we can.

Read more about our sign-off and release process

CODE STYLE GUIDES

We use .editorconfig files for every project, which help tell your favourite editor how many spaces to use for tabs and what-not. But good and consistent code style is so much more that just spacing and syntax. We've documented some of the common design patterns that lead to more readable, more easily maintainable code.

Go to our Ruby style guide
Go to our Python style guide

 
postits.jpg

Quality


Quality


Complete test suite

Testing is an incredibly important part of ensuring quality. Here’s why as a developer you should want to employ good testing techniques from the start, not as an afterthought.

Read more about testing

Tackling technical debt

As a team we often have to make a decision between spending time to deliver the perfect solution for a new feature, over getting it done and launched, knowing that introducing imperfect code is a debt the team will have to pay later. Treating it as such is a good way to understand when it's worth doing so - meeting a deadline can be important for the client, it's only when you're sure something will live for the long-term that it becomes important to the team that solutions are the cleanest, most maintainable possible.

More on tackling technical debt to come soon

Solid, group-led architectural decisions

The team is there for each individual within it. Working things out together gives the benefit of everyone's combined experiences and ways of thinking problems through. We like to run planning poker sessions together for more accurate estimates and to bounce ideas off each other before getting stuck in to coding.

Read more about how we make decisions as a team

Code reviews from peers

We see code reviews as vitally important to code quality and maintainability. Not only does it help catch problems and mistakes before getting merged in with production code, it also gives the reviewer more visibility on what's getting added to the code base, spreading the knowledge instead of creating experts in specific areas.

It is possible to do them wrong though. We try not to give the developer who's code is being reviewed a complex about their coding abilities.

Read more about our code review process

Demo and staging environments

Having a sandbox for developers to run wild in is one of those comforting things that leads to more fearless development. It's also vital for running things like performance tests accurately. And it's not all that hard to do.

Read more about the environments we use and how we set them up

Continuous delivery

More on continuous delivery to come soon

Gathering analytics and feedback

We're on a mission to educate our clients and each other about how important it is to make sure we're tracking everything we should from day one of the launch of a new product or service we've built. When we're improving on an existing service, starting to record metrics is sometimes the only way we're going to know that our changes are leading to genuine improvements.

Read more about analytics

Monitoring

Writing the perfect code, getting everything right first time is not always achievable. Servers will not run indefinitely. Hard disks will fail. Networks will go down. Open-source and third-party software and services will change over time. So it's a good idea to ensure we're monitoring all the essentials behind each of our running projects so that we know whenever things do go wrong.

Read more about monitoring

Exception handling

More on exception handling to come soon

 
Light bulbs.jpg

Focus


It makes sense that we focus our efforts as developers on the new - the business logic that is innovative and interesting, not the stuff others and us have done time and time again. This section is a list of ideas and tools that help us do that.

Focus


It makes sense that we focus our efforts as developers on the new - the business logic that is innovative and interesting, not the stuff others and us have done time and time again. This section is a list of ideas and tools that help us do that.

Our Handbook

The idea behind publishing all of the information that helps us day-to-day is to retain knowledge and share it with each other. With so much involved in web development and with new tools and techniques being created and discovered all the time, it helps to keep track of it all.

Re-usable templates

We create new projects a lot. New projects and new services within projects, as we're advocates of service-oriented architectures. Starting a new project is actually quite involved and can take time away from the business of getting on and coding something, so we've made some re-usable templates that start us out with all the frameworks and libraries necessary for particular circumstances, that we've agreed that we like to have as a default.

Read more about our re-usable templates

Libraries

As is often the case, there are patterns, algorithms and helpful bits of code that we end up using again and again. Copying and pasting that code as needed is one way to do it, but a smarter way is to wrap the useful stuff up as libraries. It takes a little additional effort, but becomes easier and easier the more its done. The benefits are that your colleagues and future selves can usually just drop these in to later projects, safe in the knowledge that its been fully tested and approved elsewhere, leaving you time to get on and work on the unique stuff.

More to come soon on libraries

Design patterns

Over time, as a developer you'll develop a mental map of routes you've taken to solve particular types of problem, that crop up time and again. These are design patterns. The good news is that others have also solved similar problems in the past and have refined their design patterns over time too. There's a wealth of information out there on the common ones and they're incredibly useful things to know about, as they help you get to the most appropriate solutions sooner.

More to come soon on design patterns

Learning from past projects

We run retrospectives at the end of each sprint and each project, hoping to understand what went right for everyone involved, as well as what could have gone better. It's important to record and understand both - so that we can consciously do more of the good stuff and work out ways to stop the not-so-good from occurring in the next project. Any changes to our process, our tools or our methodology we'll try and document here.

More to come soon on retrospectives

Open-sourcing

We make use of a lot of open source technology to achieve amazing things. As a business, we've decided that it's definitely ok to spend time fixing, improving and adding to open source software, as well as take the time to package up and release our own.

Read more about open sourcing

 

User-Centricity


At Adaptive Lab, everything is built with users in mind, whether they're end-users, customers, call-centre staff, admin users. By putting their needs and feedback centre stage, we believe we create better products and services as a result.

User-Centricity


At Adaptive Lab, everything is built with users in mind, whether they're end-users, customers, call-centre staff, admin users. By putting their needs and feedback centre stage, we believe we create better products and services as a result.

Working with the rest of the team

Everyone brings something different to each project. We are fortunate in that we get to work with product-minded people who have a great understand of the tools and techniques for user research that makes for valuable and useful information. As developers, we need to think in these terms too and we need to be good at communicating our status, our thoughts and ideas to the rest of team.

More on working as a team to come soon

Being involved in research and design

As developers at Adaptive Lab, we're not satisfied with just being given a list of tasks in priority order to work through. We get more involved earlier on, being there during ideation and planning stages, representing the technical side of each project, which is usually one of the major factors.

Getting involved in user testing

For us, it's not enough to throw our work over the wall and move onto the next thing. We're interested in the results of our efforts and we like to understand what it is that can be done to make a product even better, after listening to real users and examining real usage data.

Adding analytics

Analytics are a must for any project, if we're to prove its success. A client may be happy with the work, but unless the right information is being tracked right from the start, they won't know if their customers feel the same. Every product and every service can be improved and refined over time - analytics are a vital starting point from which to do so.

Read more about analytics here

Volunteering technology insight

We're relied to bring technical insights that might help deliver benefits sooner, or to work out scoping such that time is spent on the most valuable features for the whole team to work on.

Delivering regularly

We plan meticulously, so we know what is possible to achieve in a sprint. As we're working, reality creeps in and gets in the way, but our agile methodology is designed to cope with change and to ensure that we can still have something good to show at the end of it. As developers it's our responsibility to know what's expected of us and to escalate any blockers that stand in the way of that.

Read more about our agile way of working

We implement automated continuous delivery at the start of each and every project, making it easy to see the current state of play on a staging platform and to ensure that whenever something is ready to go, it's on production as soon as required.

More to come soon on continuous delivery