Roller Coaster Overview (Part 1)
Roller Coaster - Overview
Project Summary
Roller coaster is a game that allows you to build and ride coasters. Over the past 11 years I have had a version on warcraft 3, windows phone and the web. Roller coaster has brought in over 1.5 million downloads on windows phone. My latest version in 2018 was a web version using web assembly (Blazor C#) and WebGL (Three.Js). My next version will allow you build, ride and share coasters on the web.
12 months ago, I entered a new job and I joined a team with significantly different practices then what I was accustomed to. Eventually most of those practices sunk in. There is a difference though between following practices, high level design decisions, and packages that were largely set in place vs going though that process myself.
This project’s primary purposes are growing my skills by working though design decisions ,practicing my craft, building a portfolio project at a professional grade, create a foundation for other projects to come and to create a successful (100 new accounts daily) roller coaster game.
http://rollercoaster.dickinsonbros.com (2018 Version - Builder Only)
User Stories
For now, I will only scope in the new features instead of the building, riding and rendering. These user stories are desired features for the application from the user’s perspective.
Account
- Create Account (Email Optional)
- Login
- Reset Password (If Email Exist)
- Update Password
- Update Email Settings directly from all emails
- Update Email Settings when logged in
Coaster
- Create
- Save
- Load
- Share (Private Link)
- Publish (Public)
- Find and rate published coasters
- Get notifications when your coaster is is ridden or rated
Achievement
- Gain achievements
- View achievements
- Get notification when you receive an achievement
Principles
After much consideration and speaking with many colleagues I determined principles highly depend on the project. For example, I have a brother who writes mobile app games for a living and many of his projects do not store any personal data or passwords. Putting in the extra effort to help ensure security, correctness, and maintainability may not be worth the effort until he knows the game is popular enough. This is totally acceptable as many of them are in a sense a prototype. I am aiming for a production ready system that contains some personal data and this drove me to the following principles.
Secure
- Modern password encryption
- Login attempts guarded
- Communication encrypted
- No personally identifiable information (PII) In logs or reporting database
Correct
- Testing - Unit, Integration, Manual
- Multiple environments
- Blue / Green Deployment
- High fidelity logging
- Durable
Service Level Agreement
- Load testing
- Monitoring
Maintenance
- High fidelity logging (Yes this in here twice)
- Reporting - accounts, coasters, achievements, and system health
- Source control
- Continuous integration
- Documentation
- Health checks
For production applications I have seen differing opinions on the degree of correctness and maintainability. Lower quality projects tend to have more patching and having to patch even for a 1 liner can take meetings, coding, code reviews, releases and post release monitoring. My experience has shown me It is worth the extra effort to ensure its secure, correct, handles expected load, and is maintainable.
Conclusion
I have laid out the project and user stories and decided to build a production ready system. I have created principles and items that will help me measure and ensure they are met. These high-level decisions will guide the decisions and creation of the project.
Design Decisions (Part 2)
https://www.marksdickinson.com/posts/roller-coaster-design-decisions-part-2.html