Grabilla (grabilla.com) is a system we developed.
The main goal of Grabilla is a secure screen and media/file sharing for businesses and professionals.
We used the following list of technologies while developing the solution:
- Applications: C++, Qt, Java, Objective-C, browser extensions.
- APIs: Saasiter Licensor, NetODB, LoginRadius, Facebook, Google Drive, PayPal, AWS
- SDKs: PHP Zend, Facebook, Google Platform, Twitter, netODB.
Grabilla is a startup that we bootstrapped as it didn’t have a venture or large angel investments. The project started as a one client project and has grown to a system that is used at times by up to ~100K users per month. Minimal monetization also didn’t help the growth of the system. Thus the system was created with budget effective scaling in mind. Below are a few methods that were used to achieve this:
- Scaling and reliability
- Goals: easy to scale storage and sharing API for clients, ability to use most cost effective hosting providers, redundancy in file storage.
- These goals were achieved by implementing a file storage API based on cluster servers (2 servers at start) that was reachable by clients through DNS based clustering.
- Service Oriented Architecture using multiple services and APIs.
- CDN services usages for caching and faster file retrieval.
- Support of multiple platforms
- C++/Qt as a platform for clients that can be deployed for MacOS, Windows and Unix.
- Browser plugins and mobile clients.
- Video conversion and codecs supported by all platforms.
- Backend and files storage private installations
- Lightweight deployment and installation of backend to support private clients.
- Maintainability and continuous improvement through Service Oriented Architecture (SOA)
- System is built on multiple services with ability to replace outdated component easily without compromising full system
- Services and APIs for annotations, file storage, database storage, files conversion, video processing, authentication providers, licensing, CDN management, etc.
- Core backend application code contains minimum logic and is easily transferred to other platforms or programming languages (did it for PHP, NodeJS and .NET for clients)
- Separated monitoring of services allows us to find any issues or bottlenecks quickly.
- Development with Continuous Integration and Delivery
- System is deployed using Amazon instances or through Docker; production, staging and development deployment is done through a build server.
- Agile/Lean Requirements Management and Prioritisation
- Agile methodology allowed to prioritize new development based on product marketing goals and scale up and down team whenever it is required.
- Separate person allocated for analyzing competitors and build potential road plan for the system in order to remain competitive and up to date with the market requirements. This market research role helps the product owner to gather information from the market faster and react to new APIs or opportunities that can be used for the market.
- Efficient Quality/Budget oriented team management
- As the team is scaling up and down depending on the current road plan, it was important to have Service Oriented lightweight architecture instead of a monolithic codebase. Many of the services could be implemented by junior and intermediate team members working on it part-time thus a team is oriented on a quick ramp-up time for new members. This is achieved by having multiple services and well-defined protocols of communication and versioning between them.
- Our structured code review process makes sure that junior and intermediate team members implemented the requirements correctly for both functional and non-functional aspects of each component.
- Quality Control and User Feedback
- In addition to manual testing and monitoring tools we have an infrastructure for beta users to report errors or concerns and system gathered usage and happiness feedback constantly from users.