Tread Lightly

An approach to building websites

Luke Hedger
Feb 25, 2017 · 5 min read

The concept of ‘treading lightly’ is designed for technical product teams within startups.

Treading lightly describes an approach to product development whereby implementations are made on the smallest possible scale without over-commitment to a single technology or methodology in order to facilitate future enhancement.

By treading lightly, the focus remains on the product and the entire tech stack becomes an implementation detail.

Innovate now without restricting future opportunities

The fast pace of change inherent to early-stage products requires technical teams to be prepared for product changes and the fluctuating nature of technology trends requires them to be open to implementation changes. By treading lightly when building product features, iterations can be made constantly and rapidly and changes to architecture and tooling can be made without restraint.

To borrow from Postel’s law: technical teams should liberally accept feature requests but develop conservatively, fostering innovation whilst adding features in a harmonious fashion with minimal code and upheaval.

Treading lightly is really an amalgamation of ideas and experiences. Let’s dive in!

‘The Red Model’, 1934 by Rene Magritte

Resilient Web Design

The whole of this book by Jeremy Keith is essential reading for anybody who goes near the Internet. Jeremy’s ability to distill the essence of designing and developing for the web is wonderful.

Two key themes that run throughout the book are: use your tools correctly and start with the basics before enhancing. Jeremy points to the GOV.UK team’s two-step design process:

First, just make it work; second, make it work better.

For product innovation to thrive implementations must be kept basic and minimal. This doesn’t translate to a lack of features, quite the opposite: by maintaining lightness progress becomes constant.

Evolutionary Architecture

Neal Ford and Rebecca Parsons from ThoughtWorks coined the term Evolutionary Architecture in 2016. With an evolutionary approach, change becomes a first-class citizen. Neal and Rebecca cite microservices and Domain Driven Design as prime examples of this concept.

This level of separation can be difficult when applied to client-side web development particularly with JavaScript frameworks and CSS in general. Everything is much more naturally coupled. Nevertheless, the same approach can be applied with careful planning and craft — even to CSS.

You can hear more about evolutionary architecture on the ThoughtWorks podcast but in the meantime here is an illuminating quote from that episode where Rebecca Parsons speaks about adaptability vs evolvability:

Incremental Adoption

Lee Byron’s talk ‘Lessons from 4 Years of GraphQL’ deserves an honourable mention here too. Lee describes how GraphQL was incrementally adopted into Facebook products and this important lesson can be applied to adding features to our own products:

Sacrificial Architecture

Martin Fowler’s concept of sacrificial architecture may seem contradictory to the ideas of evolutionary architecture and incremental adoption but we may be able to find some use for it. Martin describes a practice of discarding product implementations frequently to keep pace with changing technology and business requirements, stating: “the best code you can write now is code you’ll discard in a couple of years time”. He tells the story of how eBay tore down their codebase at a rate of every 2–4 years:

This echoes the Resilient mantra of using the right tool for the right job and using it correctly. Martin then goes on to make the interesting yet familiar point that, when you are implementing a product or feature, seldom are the business or engineers clear on its requirements:

Sacrificial architecture can also be applied to MVPs and prototypes:

If you haven’t come across Emma Coat’s 22 #storybasics they are definitely worth a read for anyone with creative pursuits. One in particular comes to mind when considering the merits of sacrificial architecture:

#3 Trying for theme is important, but you won’t see what the story is actually about til you’re at the end of it. Now rewrite.

Write. Now rewrite.

Clean Code

When treading lightly, it is paramount that all code written is consistent and maintainable. Without well-structured code, future iterations and refactoring become so much harder. Here are some good resources for writing such code:

Be a light treader

A real privilege of working in such a relatively young industry is the scope for change and the opportunity to be a part of shaping that change. A young company can be the perfect place to practice this discipline; the chance of a blank canvas to try out the latest tools and techniques. But there is no reason that innovation and experimentation should be restricted to the initiation of a product or company. And no reason that today’s innovation should restrict the possibility of future innovation. We should be able to continually innovate and experiment and enjoy it too! By implementing our ideas smartly and lightly we can build evolvable, resilient products.

Luke Hedger

Written by

Tales from the frontiers of the web. JavaScript, Web3, simple, nimble 🤳

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade