From the moment the first investor's check clears -- or the founders quit their day jobs -- every software startup...
hears the loud ticking of the countdown clock. And, before the timer hits zero, it's crucial to complete a software product launch.
If you work for a web-based software startup that either relies on someone else's physical equipment, such as Uber or Airbnb, or charges a monthly fee, like GitHub or Treehouse, you know the pressure to reliably deliver a working technology stack. Developers at companies that build mobile apps or Windows software also know this time crunch.
Startups can use these steps to beat the clock on a software product launch and still offer quality experiences for end users.
Set the app's end-to-end architecture
Modern web apps have multiple layers, such as the database, web server, application code and APIs. Traditionally, developers build with those and a lot of glue code, which translates and integrates these layers.
But it is an out-of-date and cumbersome practice, especially when the software product needs to launch yesterday. Ruby on Rails, Microsoft's .NET architecture and -- to a lesser extent -- the Node.js framework all eliminate the need for glue code. For example, Rails can take a database table description and generate the code for a basic CRUD (create, read, update and delete) web form; all that is missing is the page styling.
Most applications rely on a core algorithm that powers functionality. A mortgage order entry application, for example, might enable users to model loan pricing and integrate with lenders, which then place a bid with this customer. Figure out which algorithms can help achieve the customer's desired outcome, and create those. Everything else that gets a software product launch out the door -- version control, CI/CD, deployment tools -- should follow a standard setup that doesn't require the developers' attention, and everything else can be rented.
In other words, quickly get to a point where a software product goes to market, get feedback from customers and then iterate. The development tool set should not hold things up.
Containers are your friends
Startups don't have time for "it works on my machine," and they certainly don't have time for "the test web server is busy testing the production patch so development will have to wait." Software simply has to work.
Startups need the systems in place to produce a web server with the code and every dependency loaded. Lightweight virtualization can help, as it typically only takes a handful of megabytes on disk, enabling testers to use one laptop to store a dozen branches of the software product code and switch between them in minutes.
Docker containers and Windows containers can enable that kind of work, as can PaaS offerings, like Heroku, which provide a similar service. However, both these technologies change frequently, so find one that best fits your needs and has a complementary roadmap. Make sure the build system produces artifacts, like Docker containers, that other services can easily consume, in case you need to switch vendors.
Additionally, build scalable systems. Startups shouldn't need to coordinate and corral servers manually to meet traffic demand. This scaling process should happen automatically, likely on servers that you rent.
Automate your builds, test environments
The delay between writing new code and making it ready to test can become a time-killer at any startup. Instead, automate it with a CI/CD pipeline to enable quicker releases.
Any time a developer pushes new code to version control, automate the process to kick off a build, run unit tests against it and produce a container -- if not a fully functioning web server. The CI/CD pipeline has the potential to push code all the way to production with a single commit. Automation enables organizations large and small to have new builds reach production at a faster pace and eliminates what might be a startup-shuttering delay on a big software product launch.
Rent your version control system
To perform a commit, you need a code repository, and it can be prohibitively time-consuming to install and manage a version control system.
Both Git and Mercurial offer hosted version control systems. Set one up on a corporate credit card, and then make enough commits to create a simple working system. Configure CI/CD to pull from version control, create the build and deploy the code to the cloud.
Authenticate with a common standard
Many internet users have a login to Facebook, Gmail or LinkedIn; OAuth (Open Authorization) caters to that prolific segment of end users and the software companies that court them.
OAuth 2.0 is an open standard that enables users to log in to a given software product with their existing social media accounts. OAuth even provides plug-ins to major software platforms, such as Moodle, that handle that integration. Cobble together a homepage, add the plug-in and watch users jump into your application with an API to hand the application a username, email address and full name.
Keep the front and back ends separate
Skip everything possible
A lean startup approach brings the software product from zero to full speed in as little time as possible. The strategy is simple: Assemble components to get the software in the hands of the customer quickly, then validate the market and build it. You can always pivot if the customer fit isn't right. Other startups might prefer a different approach, but whatever strategy you choose, move quickly.
When 37signals launched Basecamp in 2004, it was a new idea from a consulting company that had no previous experience with a subscription-based product. The company offered the software for free for 30 days and decided to launch the initial software product without a billing system. If the software was a hit, it could build the billing system in the last 15 days. If it was a dud, billing wouldn't matter.
Today, Basecamp is a recognized leader in project management software, with over 2 million accounts. Take a lesson from 37signals: If you don't absolutely need a feature, don't build it -- yet. And you often don't need to build something; rent, buy or borrow the components you need.