The Minimum Viable Product (MVP) is the first version of a software product. Released to a private invite-only beta list, this real software validates the Critical Path of the product through actual customer payment and use.
We start all new and inherited products with a baseline of technologies and communication to meet and deliver quality results within tight timelines.
Through immediate communication on Slack, daily standups, and weekly retrospectives, our clients are always informed and tightly integrated with our developers.
With Version Control (GitHub) and Continuous Integration and a slew of automated management tools, our developers are able to deliver code quickly and efficiently to a staging (customer acceptance) environment or even straight to Production.
To kickoff each phase of development (usually a week), we prioritize solutions and select a unified goal to achieve that phase.
Usually using the RICE methodology pioneered by Intercom, we weight Reach and Impact of a solution and carefully weigh it against the Effort required to meet those goals.
Once we have a goal focused, we instrument measurement technologies that will allow us to track our impact against the goal. With new products we typically simply monitor high-level usage of an Application, looking for resource creation or pain-points users might experience.
With a goal in-mind, we look for the best possible technical solution with our architectural expertise. Most of the time, Effort heavily impacts priority and we choose fast technologies to validate an idea in the market.
We've found Ruby on Rails to be the fastest way to get to market. Backend by a relational database (like Postgres), full-stack server-rendered web applications can hit the majority of markets with minimal effort.
Outside of this core technology, we often have need of some unique solutions. Be it geolocation, separate channel communication (like email or SMS), payment processing, or some heavy analytics, we've delivered solutions across markets with custom code, heavily vetted 3rd Party Services, and well-maintained Open Source packages.
At this stage, we setup repeatable environments to scale and support future development efforts under each new architecture. With local environments for development and automated testing, we also mirror test to continuous integration, setup a staging environment for non-developer acceptance, and setup the final production environment with the new architecture.
From the planned architecture, we get down in code, extending the prototype in Front-end HTML and CSS (HAML and Sass) and designing data-models, controllers, and APIs through back-end development.
Simultaneously, we write automated tests, run data migrations, and perform optimizations on memory and processing power as needed. These two systems are connected seamlessly through variable mapping by engineers that understand and write both systems.
This delivery shows results every single day of development, and is repeated daily until a phase of development (and goal) is completed.
Some clients opt-in to acceptance testing through a staging environment. We guide them through the application features and train them on the new system or provide them with detailed acceptance criteria.
This optional step allows for gated releases to live customers to prevent daily changes to their habits and behaviors. It's only recommended once the product's customers are no longer solely early adopters, as continual delivery of new functionality is incredibly valuable to customers.
Throughout this testing we monitor changes and problems automatically through our instrumentation of tracking software like FullStory, Pendo, and Analytics.
Since we've previously setup all architectures, our production releases are single-commands that take a matter of minutes to release new features to live customers.
Alongside code changes, we help clients announce and market new features or UX changes - with training or help center articles clearly communicating our intent (when needed).
We also provide ongoing customer support for the products we build, focusing on our client's business objectives above and beyond the initial product design and development.
Finally, we use the measure instrumentation and help our clients realize the impact their investment made to their business.
The outcome of each phase of development is then a clear positive or negative progression of their business. In the off chance that it's negative, we'll repeat development of the same goal or help pivot from assumptions that were previously made.
On the normal case that progress is underway, we'll evaluate next goals for development from the prototype, or recommend returning to Plan and Prototype future customer problems to increase Customer Lifetime Value.
At this point, our clients have successfully launched new features, new products, or have significantly improved their business.