Challenge Overview
Competition Task Overview
In previous challenges we've build the SRT phase 4 code and added Estimates related tabs. We've also implemented data syncing between the cloud app and the local app which provided us a fully working app with offline capability.
While that's done and being used, we're ready to move to the next phase: re-build this app as an HTML5 app so that we no longer need to maintain a cloud app and a client app. We'd like to use the offline support of HTML5 and make it transparent to the users.
Requirements
We found out that the sync mechanism being used by the offline feature causes huge performance issues, it brought down the server in 20 mins when we have many users online because it's syncing too frequently and trasnfering a lot of unnecessary data.
For this challenge, the purpose is to minimize server load by chaning the sync strategy to just sync whatever is necessary for offline usage. Here are some basic rules:
- The code should only sync data the user has access to.
- The code should only sync data that's necessary for offline usage.
- Only changes not already in local data store should be transferred from server to local.
- The code should NOT do a full sync every time, only sync changes (right now the code seems to pull all data that belong to the user from the server every time)
- The code should only sync draft and template requests, submitted requests are readonly and can be loaded on demand
- If it doesn't hurt performance, sync down submitted requests at a much lower frequency and and only when other sync is not happening. If this affects performance we'd like a switch so we can easily turn on / off syncing of submitted data.
- The app currently waits for caching of web content / syncing of data to complete before it's usable, that should not happen. The app should be usable immediately after it loads necessary resources from the server (just like when sync is disabled). Syncing / caching should be done in the background without affecting user experience, and when these are not done it simply won't work in offline mode.
- Please propose a way to stress test this performance issue (but no code implementation is needed), we want to launch a test suite challenge to stress test this following your guidelines (for example: how to mock up 100 concurrent sync requests to the server).
- NOTE: you're free to propose / implement more enhancements to performance, and you get bonuses for doing so!
Other Notes
- Performance is a huge deal for this challenge and it will be a key factor in the review of this challenge
- Make sure all the paths and tabs work exactly properly in both online and offline modes (note now you have to turn on sync to make offline work, check helper.js for the config)
- Make sure the app works with both Oracle and Postgres databases
- Bug fixes must be tested in both Windows and Mac OS X!
- If changes are needed to the database, we need an additional script that can be used to alter the client's existing database since we cannot just drop the tables and re-create them.
Documents Provided
- Code: we have provided all necessary code in challenge forum.
- Document: the process document is provided for you to understand the different paths.
Code Base
Please fork our gitlab repo and use the specified branch as base for this challenge. The winner will also be asked to help with code merge (perhaps via a merge request).
Timeline
This challenge has an aggressive timeline, make sure you pay attention to the deadlines!
Browser Compatibility
This must work on latest version of Chrome / Firefox / Safari on Mac / Windows / Linux.
Winner Responsibility
We may ask the winner to deploy the final submission on a VM and help with code merge.
Technology Overview
- Java
- Postgres
- Oracle
- Tomcat
- HTML5
- AngularJS
Documentation Provided
Register to download documents from challenge forum.
Final Submission Guidelines
Submission Deliverables
A complete list of deliverables can be viewed in the TopCoder Assembly competition Tutorial at: http://apps.topcoder.com/wiki/display/tc/Assembly+Competition+Tutorials
Below is an overview of the deliverables:
- Code that covers the requirements
- A (NEW) complete and detailed deployment documented explaining how to deploy the application including configuration information. If deployment guide needs no change then a separate verification guide.
- You can remove the other irrelevant deployment guides from your submission.
- The maven build script to create the war files. Very likely you can reuse the existing one and don't need to modify anything.
Final Submission
For each member, the final submission should be uploaded to the Online Review Tool.