With essential context set up in a previous post, we can start looking into high-level requirements for Diakheiripi system.

Business goals

• Automate management of volleyball tournaments. Make easy scheduling for tournaments and games. Report standings and calendar.
• Provide a learning ground for anyone interested in learning programming enterprise applications and .NET platform in particular.

Comparing to the initial goals, the second goal has changed its focus slightly. The earlier focus was to help IT academy students to learn how to build systems. This technology, patterns, and design choices were somewhat constrained to the common denominator of systems our company had to deal with.

At this moment, I want this system to serve more as a learning playground but preserving its ability to ship and usefulness. At the end of the day, it will be used in production. I want to try some technical approaches which I wouldn't do for real projects. As a third priority being something useful for the IT Academy to work on.

Major features

F-1 Tournament creation and scheduling
F-2 Enter game results
F-3 Tournament rankings
F-4 Player Management
F-5 Team Management
F-6 External Sites integration
F-7 Game scheduling
F-8 Multitenant support

Potential users of the system might represent different cities or organizations so we should support multi-tenancy.

Non-functional requirements

Availability

We don't have any specific requirements for availability, but we'll achieve 99.5%.

Performance

As per v2, our approximate daily visitor count was around 100 per day. Most of which looked at the standings table around 9 am the next day after tournament round finished.
I want to handle a little bit higher amount of sessions.

System should handle 100 per hour doing minimal workflow: login - view standings - view schedule - log out.

Scalability

Still, I'd like the system to be able to scale fast.

The Diakheiripi system should scale to handle 1000 simultaneous users within 30 seconds.

Security

It's quite a broad topic which I'm going to cover in the upcoming posts. At the high-level system should have:
- Role-based access control(RBAC)
- DDoS protection or mitigation
- OWASP Top 10 prevention

Usability

I'm not a usability expert, and it will be hard to define proper target requirements.
I'll do my best to have a simple system.

Accessibility

It's always an overlooked requirement, IMHO. I want to take a challenge and learn what does it mean to build an accessible system.
Another aspect of accessibility is mobile device support - for us, it's a vital feature as often we don't have a laptop at the tournament site.

Observability

System should be able to detect any failure within 10 minutes

Maintainability

As we are developers with only a handful of free time to dedicate, we need to make working with the code as easy as possible.
Also, sometimes students will collaborate on the code base, so we have to make sure their changes are consistent.

Testability

It's simple here we will use a combination of ATDD, BDD, and TDD.
My experience tells me that those practices bring good results for such systems.
At some point, I'll write about it.

Modifiability

I want a system flexible to change in technological requirements. Say SPA is no more a thing and we should use Blazor.

System should be able to integrate completely different user interface within 1 month of development effort. Excluding effort for developing new interface itself.

Next steps

In the upcoming blog, I want to focus on the preparation for requirements analysis workshop preparation.
Stay tuned. 🏐✌