Philosophy

The Veil of Ignorance in System Architecture

· 5 min read · Updated Mar 11, 2026
John Rawls’s veil of ignorance, introduced in “A Theory of Justice” (1971), asks you to design a society without knowing which position you will occupy in it. Applied to system architecture, where design decisions affect different user groups unequally, the veil asks: if you did not know whether you would be a power user or a novice, a high-bandwidth client or a low-bandwidth one, able-bodied or disabled, how would you design the system differently? A 2024 WebAIM survey found that 96.3% of the top million websites had detectable accessibility errors. The architects knew which group they belonged to. The veil was never applied.

What is the veil of ignorance and how does it apply to architecture?

The veil of ignorance is a thought experiment that removes self-interest from design decisions. Behind the veil, you do not know your role, your abilities, or your resources. You design for everyone because you might be anyone. Applied to architecture, it reveals how much design reflects the designer’s own position rather than the user’s needs.

The veil of ignorance, proposed by John Rawls, is a method for determining fair principles. Behind the veil, decision-makers do not know their own social position, abilities, or preferences. Rawls argued that principles chosen behind the veil would be just, because no one could design rules that favored their own position.

I designed an API authentication flow. I assumed the user had a stable internet connection, a modern browser, and familiarity with OAuth. These assumptions were invisible to me because they described my own situation. Behind the veil, I would not know whether I had a stable connection (23% of global internet users do not), whether my browser supported modern JavaScript (14% of users in developing nations use browsers 3 or more versions behind current), or whether I understood OAuth (the vast majority of non-developer users do not).

Behind the veil, I would have designed the authentication flow differently. I would have included fallback mechanisms for intermittent connections. I would have provided a low-JavaScript alternative. I would have designed the OAuth flow with explanatory guidance rather than assuming familiarity. The veil reveals that “universal” design is usually “design for people like me.”

Why do architects consistently design for their own position?

Because designing for yourself is cognitively easy. Designing for someone whose constraints you do not share requires imagination, research, and the deliberate suspension of your own experience. Most design processes do not create space for this suspension.

This is not moral failure. It is cognitive default. The engineer designing on a MacBook Pro with 32GB of RAM and a fiber connection will naturally produce designs that perform well on a MacBook Pro with 32GB of RAM and a fiber connection. Testing on a $150 Android phone with a 3G connection requires intentional effort. As I discussed in architecture for organizations without Netflix’s problems, the context you design within shapes the system you design.

Rawls’s veil offers a corrective: before finalizing any architectural decision that affects users unequally, ask “if I did not know which user group I would belong to, would I accept this design?” This is a demanding test. Most designs fail it. The value is not in passing the test but in the examination it requires.

How do you apply the veil of ignorance in practice?

By systematically identifying the user groups affected by a design decision, imagining yourself in the position of the most disadvantaged group, and asking whether the design is acceptable from that position.

  • Identify affected groups: For every architectural decision, list the user groups it affects differently. Performance decisions affect low-bandwidth users. Complexity decisions affect novice users. Accessibility decisions affect disabled users.
  • Apply Rawls’s maximin principle: Design to maximize the minimum experience. If the worst-off user group has an acceptable experience, the design passes the Rawlsian test. If not, redesign.
  • Test from the margins: Test the system on the worst hardware, the slowest connection, and with the least capable user profile. This is the veil of ignorance made operational.

What are the limits of the veil in architectural design?

The veil assumes equal moral worth of all positions. In practice, some architectural tradeoffs legitimately prioritize certain users (paying customers over free users, for example). The veil does not eliminate tradeoffs. It reveals when tradeoffs are the result of principle versus when they are the result of unexamined privilege.

I do not claim that every system must serve every user equally. That is impractical. But I do claim that when a system serves some users poorly, the architect should be able to articulate why, with reasons that would be acceptable to the disadvantaged group if they had a voice in the decision. This is Rawlsian fairness: not equality of outcome, but the requirement that inequalities be justifiable from every position.

According to Rawls’s theory, inequalities are just only if they benefit the least advantaged members of society. In architectural terms: performance optimizations that improve experience for power users at the expense of basic users fail the Rawlsian test. Optimizations that improve experience for all users, even if power users benefit more, pass it. The service orientation of platform engineering embeds this principle: the platform serves all users, with priority given to those who need the most support.

“Design as if you do not know which user you will be. The system you build will be fairer for it.”

The veil of ignorance is not a policy. It is a practice. A moment of deliberate imagination in the design process where you set aside your own position and consider the system from every position. 96.3% of websites fail basic accessibility tests. That number represents the distance between how architects actually design (from their own position) and how they would design if they genuinely did not know which position they would occupy. Closing that distance is not just ethical. It produces systems that serve more people, more reliably, in more contexts. Justice and good architecture, it turns out, require the same thing: the willingness to design for someone other than yourself.