Developing Strong Foundations

When beginning a new project it is essential that you put in place strong technical foundations and a healthy development environment. Discover what can go wrong and what early tasks I regard as essential on software projects I lead.


Symptoms of ‘Bad Foundations’

Common symptoms of not establishing strong technical foundations and a healthy development environment include:

  • Questionable technology choices – incorrect or overly complex
  • Inability to support flexible working practices – hindering the creation of high performing, distributed teams
  • Technical debt – disjointed codebase with mixed coding styles
  • Lack of a shared vision – resulting in a nasty myriad of practices, tools & techniques
  • Missed automation opportunities – manual testing and deployments
  • Chaotic onboarding process – taking too long for new team members to become useful or productive
  • Best practices taken to the extreme – e.g. over-engineered code, or too many brittle, slow running tests
  • Poor learning materials – over-reliance on ‘heroes’ or human knowledge silos

Checklist for good Technical Foundations

My informal checklist for a good Technical Foundation / Working Environment is:

  • Technical Design – A broad-stroke technical design (architecture) with diagrams simple enough to create in something like Microsoft Powerpoint. Not swathes of UML created in something like Enterprise Architect because few read (or understand) them.
  • Seed Project – Working code & tests that prove the design concepts and provide a starting point for the development team; hosted in the team’s chosen source code repository (e.g. GitHub)
  • Learning Materials – A skeleton set of concise, online documentation (repository ReadMe pages are a good place) to include:
    • A small set of critical Architectural Principles and/or Design and Delivery Practices
    • Clear references to the technical design (architecture)
    • Working practices (with the sole aim of allowing each team member to be as self sufficient as possible)
  • Continuous Integration – An automated test and deployment pipeline; delivered via the team’s chosen CI tool (e.g. Travis CI)
  • Onboarding Strategy – A formal onboarding strategy for new developers. Even better if you can achieve automated setup of the development environment using virtualization.

Those who are familiar with Agile projects will recognize these as being common tasks in ‘Iteration Zero’. However projects can get stuck in the mud because Iteration Zero & early iterations get neglected or rushed.

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s