Non-Goals
Every sustainable framework is defined as much by its refusals
as by its capabilities.
Plumego’s long-term viability depends on clear non-goals —
areas it intentionally avoids, regardless of trends, demand, or convenience.
This document enumerates those non-goals
and explains why each refusal is deliberate.
Why Non-Goals Matter
Without explicit non-goals:
- Feature creep becomes inevitable
- Boundaries erode silently
- Short-term convenience wins over long-term clarity
- Frameworks collapse under their own weight
Plumego documents its non-goals to prevent that outcome.
Non-Goal 1: No Full-Stack Framework
Plumego will never become a full-stack framework.
It will not include:
- Template engines
- Frontend build pipelines
- Asset management
- SSR abstractions
- Client-side routing
Plumego’s responsibility ends at the HTTP boundary.
Frontend concerns belong elsewhere.
Non-Goal 2: No Dependency Injection Container
Plumego will not provide:
- Reflection-based DI
- Container-managed lifecycles
- Auto-wiring
- Scope-based injection
- Implicit dependency graphs
Dependency injection in Plumego is:
- Manual
- Explicit
- Visible in code
This is a feature, not a limitation.
Non-Goal 3: No ORM or Persistence Abstractions
Plumego will never include:
- ORMs
- Active Record patterns
- Schema migration tools
- Query builders
- Database lifecycle management
Persistence is an infrastructure concern.
Plumego integrates with databases —
it does not abstract them.
Non-Goal 4: No Background Job Framework
Plumego will not provide:
- Job queues
- Worker orchestration
- Retry engines
- Scheduling systems
- Task dashboards
Background processing is intentionally external.
Plumego documents how to integrate such systems,
but does not implement them.
Non-Goal 5: No API Gateway Features
Plumego will not become:
- An API gateway
- A reverse proxy
- A service mesh component
- A traffic management system
It will not include:
- Rate limiting engines
- Circuit breakers
- Request shaping
- Protocol translation layers
These belong at infrastructure or edge layers.
Non-Goal 6: No Convention-Over-Configuration
Plumego explicitly rejects:
- Auto-discovery
- Naming conventions
- Implicit file scanning
- Magic defaults
- Environment-based behavior switches
If behavior exists, it must be wired explicitly.
Conventions hide behavior; Plumego exposes it.
Non-Goal 7: No Global Configuration System
Plumego will never introduce:
- Global config registries
- Environment-variable-driven behavior
- Runtime config mutation
- Implicit configuration loading
Configuration is loaded by the application
and injected explicitly.
Anything else creates hidden coupling.
Non-Goal 8: No Implicit Error Handling
Plumego will not:
- Auto-map errors to responses
- Swallow panics silently
- Retry failed operations automatically
- Normalize errors behind the scenes
All error handling must be explicit and visible.
Silence is treated as a bug.
Non-Goal 9: No Magic Performance Optimizations
Plumego will not:
- Introduce hidden caches
- Perform speculative optimizations
- Auto-batch requests
- Apply heuristic shortcuts
Performance optimizations must be:
- Measurable
- Explicit
- Removable
Hidden performance tricks always become liabilities.
Non-Goal 10: No Opinionated Infrastructure Stack
Plumego does not mandate:
- Logging libraries
- Metrics systems
- Tracing providers
- Authentication providers
- Deployment models
- Cloud vendors
It integrates with ecosystems —
it does not define them.
Non-Goal 11: No “Beginner Mode”
Plumego will not:
- Hide complexity for beginners
- Provide “easy mode” APIs
- Add training-wheel abstractions
It assumes:
- Go proficiency
- HTTP understanding
- Responsibility for design decisions
Clarity is preferred over approachability.
Non-Goal 12: No Rapid Feature Expansion
Plumego is intentionally slow-moving.
It will not:
- Chase trends
- Mirror popular frameworks
- Add features “because others have them”
Stability beats novelty.
Non-Goal 13: No Silent Breaking Changes
Plumego will never:
- Change behavior without documentation
- Break contracts in minor releases
- Rely on “bug fixes” to justify breaking changes
Breaking changes are explicit, rare, and versioned.
Non-Goal 14: No Ambiguous Ownership
Plumego will not:
- Own application lifecycle
- Own business logic
- Own deployment behavior
- Own operational policy
The framework defines structure —
the application owns decisions.
How Non-Goals Are Enforced
When evaluating proposals, the following questions apply:
- Does this violate any non-goal?
- Does this pull Plumego into forbidden territory?
- Can this live outside the core instead?
If yes, the proposal is rejected.
Summary
Plumego’s power comes from restraint.
Its non-goals ensure that:
- The core remains small
- Behavior remains explicit
- Systems remain understandable
- Evolution remains possible
Plumego does not try to be everything.
It tries to be reliable for a very long time.
Related Roadmap Pages
- Roadmap Overview — direction and constraints
- Design Principles — guiding rules
- Migration Policy — how change is handled
Non-goals are not limitations —
they are the framework’s strongest guarantees.