Our Process and Workflow
APP FEATURE SET & WIREFRAMES
This is essentially the visual architecture of what will go on each page of your app and how it all links together. Wireframing is important to define the full scope of the project and to have a mutual understanding of what will need to go into the app.
UI / UX DESIGN
The design phase is where you’ll get high-resolution .PSD mock-ups of what the app will look like when it is created. This stage is where you will flesh out logos, colors, styling, fonts, etc. and really nail down the look and feel of your app.
While working through the development stage, it is important that you, as the quote, are updated of the progress at every step of the process.
Typically this is done through project management tool such as Basecamp, Asana, Trello, etc.
After launching your app, it is imperative that you get feedback from your users so that you can make future updates to your app and incorporate feedback in the changes. We'll track the performance of your application and implement updates on a monthly basis.
Our Tech Stack
For the coding part, we rely on various coding standards such as AirBnB's coding standard and we use a folders-by-features for organizing the app files. We use ESLint to run our code style validations, and the Angular/React ESLint plugin to validate the code.
As a build tool, we mainly use Webpack, but also have experience using Gulp and Grunt. With the release of Webpack 2, which has a strong community, extensive plugin system and huge flexibility, we advocate for using it on most our projects.
Front-end libraries and frameworks
Depending on the project needs, we typically use either React/React Native or Angular/Ionic. Both are great options, and our choice usually comes down to the needs of the project.
We also love working with VueJS and Polymer.
Back-End Architecture & DevOps
We heavily use Amazon Web Services and we store and manage our code on GitHub.
While developing any Progressive Web Application, we take a TDD(Test-Driven Development) approach. This means that we first write some failing tests, and then we implement the functionality to make those tests pass.
This way, we are more focused on what we need to implement, and not waste a lot of our time thinking about solutions that do not fit our current implementation. We test our application in two ways: (1) Unit tests - Karma + Jasmine; (2) End-to-end(E2E) tests - Protractor