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 development cycle.
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 testing) environment and 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 pirate-metrics of a business, 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.
90% of the time, we've found Ruby on Rails to be the fastest way to get to market. Backed by a relational database (like PostgreSQL on Heroku), full-stack server-rendered web applications can hit the majority of markets with minimized efforts and expedited development cycles.
If a system has some other code constraints or considerations, we'll often look to Elixir/Phoenix, PHP/Laravel, or Go to manage back-end needs. If Single Page Applications or mobile applications are a priority, we recommend React, React-Native, and EmberJS backed by a REST/JSON or GraphQL API.
Outside of these core technology, we often have need of some unique solutions to a business problem. Be it geolocation, channel-specific communication (like email or SMS), payment processing, heavy analytics, or something else, 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 test custom code with continuous integration, setup a staging environment for acceptance testing, and setup the final production environment with a scalable architecture.
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.
We encourage all product owners to perform 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 mainly recommended once the product's customers are no longer solely early adopters, as continual delivery of new functionality is often impressive and engaging to early adopters.
Throughout this testing we monitor changes and problems automatically through our instrumentation of tracking software like FullStory, Pendo, and a plethora of other tools integrated seamlessly through Segment.
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.