From many perspectives we consider partner dance as something really great.
You get together with other people.
You improve your fine motor skills
It is in general a pretty healthy thing
The coordination with the music has also positiv impact on your mental health.
Great way to find the partner for you life
With more people dancing, have mor peace on earth ;-)
But there is something that is kind of barrier for many people to practice dancing!
How can they find a partner?
In this project we want to develop a community that brings together people that wants to practice dancing.
Dancier is aimed to be the goto System for all people looking up dancing related stuff.
This is really kind of a strech goal. So we partitioned the features in two groups.
One that we will really focus on, where we want to make the point. We call them core features.
And the other one additional features.
Enable the User to tell us want kind of dances he can/likes
Compute some recommendations for each dancer, want dance partner would match most for him.
Those features are MVP relevant. So they must be included in the MVP:
The following one will be still core, but tackeld after the MVP:
Enable Dancers and Event-Creators to provide information about upcoming dancing events, like dance evenings. This events will be presented in the same view, like the recommendations for dancers.
Those Events could be eg:
Dance Evening
Workshops
Festivals
Contests
Dancing Holidays
Enable Dance-Schools to provided information about themselves. Information for this schools will be included in the recommendation view.
When we managed that the core features have been implemented, then we can implement the following:
Allow any other dance related content to popup in the recommendation view where appropriate.
Improve the Events part:
Let the user give information if he joins an event or not.
In case he joins:
Add him in a temporary chat group only for this event to bring him into contact with others.
Enable the users to add groups to chat with others.
Nr | Quality | Explanation |
---|---|---|
1 |
Easy to use |
Dancer should find easy to use features that are almost self-explanatory. |
2 |
Good recommendations |
The recommendations should really fit. In case schools, workshops, shoes and other things where recommended, that should never feel like advertisement but as a good tip. |
3 |
Attractive |
Not only the UI should feel someway modern, also the complete project should feel like what we are: a nice group of people with the strong goal to do something useful for the world ;-) |
Role/Name | Contact |
---|---|
Dancer |
Should be able to get in touch with other dancers, to dance with them and share information |
Schools |
Should have a fine channel to get in touch with dancer that need courses, workshops and so on |
Shops |
Shops for dancing shoes for example connect with dancers |
Developer |
Learn in a hollistic way how to develop a complete product. In big companies many developers are so heavily specialized, that the lack a holistic view on software development. And sometimes the do not have a fantastic sympathetic team. |
We are so constrained. Even in multiple dimensions:
Constraint | Background/Motivation | |
---|---|---|
Software and programming constraints |
||
TC1 |
Default Programming Language for Backend development ist Java |
This seems to be still a kind a standard language for business backend applications and in the current team, the best understood language |
TC2 |
Default for Data related services is Python |
This is the defacto standard for such services |
TC3 |
Default frameworkd for backend development is Spring-Boot |
defacto standard in the Java-World |
TC4 |
Default Database is PostgreSQL |
kj |
TC5 |
Default Object Store is S3 with Minio |
|
Infrastructure Constraints |
||
TC6 |
Everything in a Container |
|
TC7 |
Everything through central IAM |
|
TC8 |
Loggin to Elastic |
|
TC9 |
Traefik |
Constraint | Background/Motivation | |
---|---|---|
OC1 |
Founder is Marc |
Dancer, that wants a plattform to connect other dancers together. Wants to learn how to drive a product holistically. May earn something, somewhen with it. |
OC2 |
Team |
Wants to learn how to drive a product holistically. Have a great time working together. Have a reference project. No intention to earn anything with it. |
OC3 |
Workmode: always pair |
Where ever possible, use 4eyes-principle/pair with some other, to achieve mostly to things: share knowledge and grow by this, do not be the one that is not allowed to die |
OC3 |
Workmode: startup |
Only do things that immediatly pay of in the next 6 months. Thins that slow us only down and pay off later: do not do this. |
OC4 |
Licence |
All the source code will be released under an open source license. Everyone can fork the project and start a dancier on his own (with another name of course) |
Convention | Reasoning | |
---|---|---|
C1 |
Be polite |
being aggressive, rude.. will never to anythign good when working together |
C2 |
Hear first |
Confronted with some point of views that seem strange to you have the respect of your collegue that your first thought ist: he will have his reasons. So give him first a chance to explain and then thing about it. |
C3 |
Code Style |
Use the Java Code Style of google. Use PEP8 for python. Aim to follow the principles of clean code. |
Dancier stands on its own, in that way that no technical interfaces to other non dancier systems exist.
All relevant stakeholder will use an web interface to perform their needed work.
We are not communicating with other non-dancier systems.
Dancier is composed out of the following components:
We are using the following architectural patterns:
Each service has kind of its own responsibility. Everything that is considered as strongly cohesive, is bundled together in one system. So when you want to change a certain feature, you rarely will have to change more than one service at the very same time.
This enables one team working eg. on the dancer service, can do it’s work without interfering with the work of the team that works with the recommendation service.
The bounded contexts in this project are:
A Single Page Application, that is the UI for the stakeholder of the Projekt.
Contains the core of the project. Maitains the Dancer Profiles, The Schools and so on.
Acts as a Backend for Frontend for the Single Page Application the Users of Dancier will use, when interacting with Dancier.
The Dancer will emit all Events that are needed by other System, by sending it in a S3 Bucket. This happens asynchronously. In this way, the dancer will not suffer when the downstream systems are temporarily unavailable.
Contains all the functionality that is need to enable den Dancer to chat with one another.
Contains a recommendation engine for everything dancier recommends to it’s users.
Every data that the engine needs, it being read from a S3 Bucket. I will not impose any stress on the leading systems as it would be, when it eg. directly uses there databases.
We also have kind of technical contexts:
IAM
Monitoring/Logging
Be having different Systems for each different block of functionality, we can also indiviudally scale those systems. Eg. the Chat-Dancer is much more likely that it will be needed that this one have to scale up.
We are never sharing a database (in this way we are not considering the S3 Bucket as a database ;-) )
This happens for several reasons:
Individual Scaleable
Hide your own internal Database Schema
Freedom to choose the Database archticture that fit’s most. Eg. for the chat dancer a database could be very interessing, once we will have more traffic.
Write asynchronous to S3, effectivly will lead to a system where the recommendation-service could not impose any load on the dancer.
When the human session is established, all subsequent calls to the backend will have the role 'ROLE_HUMAN' sssigned.
<Overview Diagram>
<text explanation>
<Description of contained building block (black boxes)>
<Description of important interfaces>
<Purpose/Responsibility>
<Interface(s)>
<(Optional) Quality/Performance Characteristics>
<(Optional) Directory/File Location>
<(Optional) Fulfilled Requirements>
<(optional) Open Issues/Problems/Risks>
<black box template>
<black box template>
…
<white box template>
<white box template>
…
<white box template>
<white box template>
<white box template>
<white box template>
<insert runtime diagram or textual description of the scenario>
<insert description of the notable aspects of the interactions between the building block instances depicted in this diagram.>
We are planing to deploy our project in the Hetzner Cloud.
<Overview Diagram>
<explanation in text form>
<explanation in text form>
<description of the mapping>
<diagram + explanation>
<diagram + explanation>
…
<diagram + explanation>
<explanation>
<explanation>
…
<explanation>
Term | Definition |
---|---|
<Term-1> |
<definition-1> |
<Term-2> |
<definition-2> |