Feature Sets
You must define a system’s boundaries before designing it. Start by asking clarifying questions to understand the environment. For a parking lot, does it have multiple levels? What types of vehicles are supported? How does data enter the system? Is the service paid or free? Are there different tiers of user accounts?
Functional requirements define what the system does. These are the features the user interacts with.
Example: Tiny URL
- Users can derive a shortened alias from a long URL.
- Retrieve the original URL associated with the short link and redirect the user.
- Track click rates.
Allow more users to sign up to manage their links.
Example: Financial Dashboard
- Support advanced filters.
- Store historical records for long-term retrieval.
Non-functional requirements define how the system performs. These are the -ilities that ensure the system is production-ready.
- Reliability: The system must be resilient to failures and not lose data.
- Scalability: The system should handle growth in data volume without performance degradation.
- Maintainability: The architecture should obviate the need for manual intervention when bug fixes are required.
- Security: Maintain data integrity through encrypted access.
- Compliance: Adhere to industry standards.
Determine the technical infrastructure that will support features once they’re defined. Always consider storing raw data rather than just processed summaries. We can’t predict future analytics needs. Raw data is paramount - it allows us the latitude to re-process information if we add new features later or face compliance audits. Using a standard SQL database yields immediate benefits:
- Alleviate the need for manual engineering by enabling data processing without custom code.
- Incorporate robust, mature tools for security.
- SQL is a standard interface, making it easy for clients to plug into the data layer.
When adding a feature to the scope, ask:
- Does this change the functional scope?
- How does this impact non-functional requirements?
- Do we have the raw data necessary to support this, or do we need to change our ingestion method?