Via Positiva vs Via Negativa: The Subtractive Path to Better Engineering
Via Positiva vs Via Negativa: The Subtractive Path to Better Engineering
The Two Paths
Western culture obsesses with addition: add features, add meetings, add processes, add tools, add frameworks. This is via positiva - the path of addition, of doing more.
Ancient wisdom traditions recognized an alternative: via negativa - the path of subtraction, of doing less, of removing obstacles rather than adding solutions.
In philosophy and theology, via negativa (also called apophatic approach) describes God not by what God is, but by what God is not. Rather than making positive claims about ultimate reality, practitioners remove false attributions.
Applied to life and work, via negativa suggests that excellence often comes not from adding more, but from removing what doesn’t work.
Historical Origins
Ancient Stoicism
Stoic philosophers practiced premeditatio malorum (negative visualization) and focused on removing vices rather than adding virtues. Epictetus taught: “It’s not what happens to you, but how you react to it that matters” - remove the mental obstacles, don’t add coping mechanisms.
Buddhist Tradition
Buddhism’s core insight: suffering comes from attachment. The path isn’t adding techniques to manage desire, but removing attachment itself. The Buddha taught via negativa: nirvana is not a thing to attain, but the absence of suffering through the removal of craving.
Nassim Taleb’s Antifragility
Modern thinker Nassim Taleb argues that via negativa is more robust than via positiva. Removing harmful foods from your diet (no processed sugar, no trans fats) is more reliably beneficial than adding superfoods. You know what hurts you more certainly than what helps you.
“The best way to detect a weakness is through negativa via negativa - by removing things one at a time and seeing what fails.” - Taleb
Why This Matters for Engineers
Engineering culture defaults to via positiva:
- Performance problem? Add caching layer, add CDN, add microservices
- Quality issues? Add testing framework, add linting, add code review requirements
- Communication gaps? Add meetings, add Slack channels, add documentation tools
Via negativa asks: what can we remove?
- Performance problem? Remove unnecessary database queries, remove bloated dependencies, remove synchronous processing
- Quality issues? Remove complexity, remove tight coupling, remove unclear requirements
- Communication gaps? Remove redundant meetings, remove silos, remove unclear ownership
The subtractive approach often yields better results with less effort.
Practical Applications
1. Code: Subtraction as Architecture
Via Positiva Thinking: “We need a caching layer, a message queue, a service mesh, an API gateway, and a feature flag system.”
Via Negativa Thinking: “What complexity can we remove? Can we eliminate this service entirely? Can we solve this with simpler data structures? Can we remove this abstraction?”
Example: A team spent weeks adding sophisticated caching to improve performance. Via negativa approach revealed they could remove an unnecessary join in their SQL query, eliminating the need for caching entirely.
Code Example - Via Positiva (Adding):
// Adding layers of abstraction
type UserRepository interface {
GetUser(id int) (*User, error)
}
type CachedUserRepository struct {
repo UserRepository
cache Cache
}
type RateLimitedUserRepository struct {
repo UserRepository
rateLimiter RateLimiter
}
type MetricsUserRepository struct {
repo UserRepository
metrics MetricsCollector
}
// Complex initialization
repo := NewMetricsUserRepository(
NewRateLimitedUserRepository(
NewCachedUserRepository(
NewUserRepository(db),
cache,
),
rateLimiter,
),
metrics,
)
Via Negativa (Removing):
// Remove abstractions, inline what matters
type UserStore struct {
db *sql.DB
}
func (s *UserStore) GetUser(id int) (*User, error) {
// Direct, simple, clear
var user User
err := s.db.QueryRow("SELECT id, name, email FROM users WHERE id = ?", id).Scan(
&user.ID, &user.Name, &user.Email,
)
return &user, err
}
When you need caching or metrics, add them. But start by removing unnecessary indirection.
2. Meetings: Subtraction as Respect
Via Positiva:
- Add daily standup
- Add weekly planning meeting
- Add biweekly retro
- Add monthly all-hands
- Add quarterly OKR review
Via Negativa:
- Remove meetings where decisions aren’t made
- Remove attendees who don’t contribute or benefit
- Remove recurring meetings that have outlived their purpose
- Remove status updates that could be async
Application: Audit your calendar monthly. For each recurring meeting, ask: “If this meeting didn’t exist, would we reinvent it?” If no, remove it.
3. Decision Making: Subtraction as Clarity
Billionaire Charlie Munger: “It is remarkable how much long-term advantage people like us have gotten by trying to be consistently not stupid, instead of trying to be very intelligent.”
Via Positiva: Add decision frameworks, add stakeholder input, add analysis, add review committees.
Via Negativa: Remove options that are clearly bad. Invert the problem - instead of “How do we succeed?”, ask “How would we fail?” Remove those paths.
Example: Choosing a database:
- Via Positiva: Evaluate 15 databases on 20 criteria, build scoring matrix
- Via Negativa: Remove any database that:
- Your team doesn’t know
- Lacks production support
- Doesn’t meet compliance requirements
- Has known scaling issues at your size
Often you’re left with 1-2 obvious choices.
4. Personal Productivity: Subtraction as Focus
Via Positiva:
- Add morning routine
- Add meditation practice
- Add productivity app
- Add standing desk
- Add supplements
- Add learning commitments
Via Negativa:
- Remove social media during work hours
- Remove notifications
- Remove commitment to non-essential projects
- Remove toxic relationships
- Remove junk food
Tim Ferriss: “Doing something unimportant well does not make it important. Eliminating something you shouldn’t be doing is more important than doing something you should be doing well.”
5. System Design: Subtraction as Reliability
Via Positiva Failure: A microservices architecture with 47 services, each adding: service discovery, circuit breakers, retries, timeouts, distributed tracing, monitoring, logging, security.
Via Negativa Success: Remove unnecessary service boundaries. Start with a modular monolith. Extract services only when you have evidence they’re needed.
The most reliable systems are often the simplest - because there’s less to break.
Trade-offs and Nuances
When Via Positiva is Right
- Deficiency states: If your system lacks basic observability, you need to add monitoring
- Knowledge acquisition: Learning new skills requires adding study time
- Network effects: Building relationships requires adding connections
When Via Negativa is Right
- Complexity overload: When systems are too complex to understand
- Decision paralysis: When too many options prevent action
- Resource constraints: When time/budget is limited
- Clarity: When you need to understand what truly matters
The Balance
Master engineers apply both:
- Use via negativa to remove obstacles and complexity
- Use via positiva to add value where it matters
- Default to subtraction; add intentionally
Reflection Questions
- Work: What meetings, tools, or processes could you remove without loss?
- Code: What abstractions or dependencies could you delete?
- Life: What commitments could you remove to free time for what matters?
- Learning: What can you stop learning to focus on what’s essential?
- Relationships: What interactions drain energy without adding value?
Implementation Exercise
Week 1: Inventory List everything you do in a week:
- All meetings
- All recurring tasks
- All tools you use
- All projects you’re involved in
Week 2: Subtraction Audit For each item, ask:
- If this didn’t exist, would I create it?
- What happens if I remove this?
- Is this solving a real problem or a hypothetical one?
Week 3: Remove One Thing Pick the easiest item to remove. Remove it. Observe what happens.
Week 4: Measure Impact Did anything break? Did anyone complain? Did you feel the loss? Or did you gain clarity and time?
Final Insight
The via negativa path is harder than via positiva because it requires saying no - to features, to meetings, to opportunities, to complexity. Addition is default; subtraction requires discipline.
But the reward is profound: systems that are simpler, code that is clearer, decisions that are faster, lives that are more intentional.
As principal engineers, our greatest contribution is often not what we build, but what we prevent from being built. The features we don’t add. The complexity we don’t introduce. The meetings we don’t schedule.
The most powerful designs are those from which nothing more can be removed.
Via negativa isn’t pessimism or minimalism for its own sake - it’s the recognition that in a world of infinite possibilities, the hard part isn’t deciding what to do, but what not to do.
Start by removing what’s clearly harmful. What remains will be stronger.