Scalable Design Foundation

Designing for large-scale is one of the biggest challenges a designer will face. Every aspect of the project is amplified and the complexities, risks, and unknowns can have a crippling effect. Luckily, there are some steps we can take early on to build a scaleable foundation and help set our large-scale projects on the path to success.

Designate Space

Large-scale projects involve a lot of moving parts: timeline, budget, milestones, objectives, dependencies, etc. A dedicated physical space (aka ‘war room’) is invaluable for extending a team’s collective memory and establishing a centralized location for developing a shared understanding of the project. This space becomes a room-sized communication tool that facilitates team collaboration and knowledge sharing.

Collective Memory

Digital documentation is useful, but nothing can replace seeing important knowledge and artifacts from the project on a wall together. It doesn’t take long for this information to grow as the team adds notes, additional documentation, design iterations, etc.

Since human visual short term-memory is limited, this space will extend the collective memory of the team by providing a means to finding crucial project information and free them up to focus on the tasks at hand.

Centralized Hub

Another benefit of a dedicated project space is it serves as a centralized hub of project information that is visible to everyone. It becomes a facilitator for the team, allowing them to effectively and efficiently make informed decisions, collaborate, solve problems, address concerns, etc. And last but not least, this space fosters a sense of team commitment and accountability.

Define Principles

Large-scale projects require a lot of design decisions and it’s essential that these decisions be made in a consistent manner. You’ll quickly hit a bottleneck if your team is relying on a gatekeeper to make each and every decision. A more sustainable approach is to define a set of useful design principles which establish the core values from which all design decisions should be made.

As Julie Zhuo points out, these principles enable design decisions to scale across many decisions and designers:

“Instead of relying on gatekeepers to keep a high quality bar, better instead that everyone gets to agreement on a smaller set of guiding values, so that the best decisions get made in a consistent manner, scaling across many decisions, and even many designers.”

— Julie Zhuo, A Matter of Principle

Useful Principles

Useful design principles avoid being too obvious, open-ended, or weigh a positive against a negative. For example, “The design should be simple” is not a useful principle because it’s hard to disagree with and it lacks specificity. An effective design principle is one that helps to solve a practical design problem while also being able to address questions in the future.

Develop Language

Large-scale projects often require a wide variety of user interface components and patterns. These can quickly become fragmented, inconsistent, and hard to manage if the proper measures aren’t taken to document them.

A pattern library can provide many benefits for a team, including a means of documenting established design patterns in order to remain consistent and systematic, making testing easier, and providing a foundation for future growth.

Additionally, pattern libraries help to align team members on a common design language by isolating the elements that make up the interface in a central location. It is a check and balance measure that is mutually beneficial and one that promotes an understanding of each other’s discipline.

In turn, design will stay grounded in the patterns that have been established and reduce design fragmentation, therefore reducing development time and making the end user experience more consistent.


A significant challenge for many teams is moving beyond the ‘page mindset’. Building a design system around solving problems on a page-by-page basis creates a design language that is unable to scale. The more scaleable approach is to build a system of reusable components and patterns that can be used in any context, and are detached from specific viewport widths.

The key to building modularly is to ensure each component or pattern follows specific criteria. Each should be clearly defined, have specific functions and named according to this function, standardized, reusable, and detached from specific viewport widths.

Following this criteria will ensure a cohesive library of components and patterns that can be assembled to build interfaces that work across a myriad of screen sizes, devices, browsers, and environments.


Language is fundamental to establish a design system. The first instinct of many is to name components or patterns according to how they appear. For example, a ‘promo banner’ which displays promotions and consists of a large image, title, supporting text and a button. The name given to this component defines how it will be used: when we need to display a promotion, we use a promo banner.
The problem is the lifespan of this component has been defined in it’s name: no promotions means no component, and therefore the component is not reusable in instances where we need other kinds of banners.

By detaching components and patterns names from their styling and naming them according to their function, you extend their lifespan and enable reuse. In the instance of our promo banner, naming the component ‘banner’ will ensure it an be leverage whenever there’s a need for any type of banner.

Test and Iterate

The amount of unknowns and potential risks grow with the scale of a project. This can affect our design systems in a number of ways, and can easily result in some false assumptions about how our users will interact with the interface.

If design is working toward one big ‘hand-off’ to the development team, these false assumptions will be discovered when the costs of fixing them is much higher.

A more effective process is to incorporate prototyping and testing into the design process in order to validate design decisions, discover potential issues, and address them early. This will effectively mitigate risks and ensure we are building a design system that is grounded in validated decisions.


Prototypes are a great way to quickly test an idea and validate assumptions. This can be done on a component level, or expanded to test a collection of patterns or components. Building prototypes early in the design process enables us to identify potential issues that might occur later on. As a result, we can quickly address issues before they become larger problems when the stakes are much higher.

An example of this I find myself repeating on each project is the global navigation. This crucial interface element can get complex when adapting to various screen sizes or content.

By prototyping a solution early on, I am able to not only test if it a viable solution, but I can ensure that any design moving forward is grounded in a solution that’s best tested and is more resilient.

User Testing

User testing gives us the ability to inform design decisions and free ourselves from relying solely on design intuition or subjectiveness. This analytical understanding of how users interact with our product/website will not only improve the work, but it gives us solid reinforcement when justifying design decisions to clients and stakeholders.

In addition to this, user test gives us measurements to gauge success and identifying places that need improvement after launch, ensuring that the work will continue to evolve and respond to users.

The amount of challenges that a designer will face is proportional to the scale of the project, but we can manage these challenges by building a scaleable foundation.

A dedicated physical space will extend our team’s collective memory and establish a centralized location for developing a shared understanding of the project. Design principles help to establish the core values from which all design decisions should be made, and ensure that decisions are made in a consistent manner. A pattern library is useful for documenting established design patterns in order to remain consistent and systematic, making testing easier, providing a foundation for future growth, and aligning team members on a common design language. And lastly, incorporate prototyping and testing into the design process is fundamental when validating design decisions, discovering potential issues, and addressing them early.