Most new clients are referred to us by existing clients, find us through our involvement in the tech community, or discover us on Google. After doing some basic research they will usually get in touch by completing a form on our website or by shooting us an email.
Once we receive the initial request, we’ll schedule a 30-minute call to discuss the project in more detail and answer more specific questions like:
Once we’ve confirmed that we're a good fit for your project, we will talk a little more about the FullStack culture and our philosophy on building technology. We will get into more detail about rates and timelines as well.
If it looks like we have a good match, we will usually sign a mutually facing NDA so you know your IP is protected, then we’ll start the first (and most important) step of the development process, the discovery phase.Example: In 2015 Willow Tree Roots, a nonprofit organization focused on empowering HIV positive women in developing countries, contacted FullStack Labs seeking help with managing their community banking program. Community banking is a banking system in which small groups of people form a micro-bank for the purpose of making deposits, earning interest, and taking loans when needed. Willow Tree Roots was implementing community banking programs in Kenya and Peru, and needed an easy way to track depositors, deposits, withdrawals, interest earned, loans, loan interest rates, late fees, etc.
Building custom software is inherently complex. Even seemingly simple apps have hidden layers of complexity that must be uncovered and accounted for before beginning development. The discovery phase allows our team to invest the time needed to understand your app from A to Z, and go over every required feature, user story, user type, screen view, etc., which in turn allows us to more accurately estimate time and cost.
Generally, the discovery process includes:
At the conclusion of the discovery process we'll provide you with a detailed document that describes all of the items listed above.Example: After our first call with Willow Tree Roots we had a general understanding of what they wanted to build, but we knew there was a lot of hidden complexity that we needed to uncover during discovery. Below are the findings from our discovery process, as well as wireframes and time estimates. The app that we eventually built for Willow Tree Roots was named TableBank.
Great apps start with great design. You can build the most amazing app in the world, but if it's ugly and difficult to navigate, no one will want to use it, and your efforts will all have been for nothing. The success of your application is as important to us as it is to you, so we place a high degree of importance on getting the design right, so that you end up with an app that’s as beautiful as it is functional.
Generally, our design process includes:
Coding is the most complex and time consuming part of building software, so we only start writing code once the discovery and design phases are complete. This ensures your budget isn’t wasted building features and functionality that will require major revision, or worse yet, have to be thrown away and completely rebuilt. It’s best to make these mistakes during the much less costly design phase, when things can be changed with just a few clicks of the mouse. As we mentioned above, we would not take on a project without a discovery process or design phase (skipping these steps pretty much ensures failure), we would rather decline the project than agree to a process that we know will fail.
On most projects, the development phase includes:
As you’re probably figuring out, building custom software applications is a complex process that requires collaboration and input from multiple people. It’s not uncommon for a project to include half a dozen people (or more) on your side, and half dozen people (or more) on our side.
To give you an example, most of our projects will include:
Given the number of people involved, communication, collaboration, and management can be challenging. Based on our years of experience, we’ve developed the following process that we use on each and every job. It’s designed to increase productivity and maximize your budget, while at the same time keeping you up to date on what’s going on.
Here’s what you can expect when working with us:
One communication channel. The last thing we want is everyone on your team and everyone on our team spending all their time discussing the project over email. We find email to be an ineffective method for communicating within groups. It’s slow, lacks transparency and clarity, and doesn’t integrate with our other project management systems. So instead we use Slack, an enterprise focused, team chat application.
For each of our projects we create a “Slack Channel” which is basically a group chat room where everyone on your team and ours can communicate and collaborate. Sometimes the communication is between someone at your company and someone at ours, and other times the communication is between our developers, managers, and designers. For instance, it’s common for our developers to use client chat rooms to discuss challenges they are having, or for our project managers to ask for updates or give advice. This level of transparency into our team communications gives you complete visibility into what’s happening on your project, both good and bad, and makes collaboration and communication between your company and ours easier and more effective.
Additionally, we’ve integrated all of our project management systems into Slack, which allows us to automatically post updates to the Slack channel throughout the day. For instance, each time a Jira story is created or completed, and each time a GitHub pull request is merged, a notification is posted Slack. This allows Slack to serve as the activity feed for the project, showing everything that’s happening, as it happens.
Building technology is a complex undertaking that requires careful planning and extreme organization. There’s thousands of things that need to be completed in specific ways and in a specific order. Trying to achieve this level of organization using email, excel, verbal conversations, etc. is nearly impossible…. so instead we use Jira. Jira is an enterprise project management software solution built specifically for developers. For each of our projects we create a Jira board and provide access to everyone on your team and ours. Each Jira project is broken down into “sprints” which are short term (usually two week) development goals, and each of those sprints is broken down into daily tasks (stories), which are further divided into four groups:
Our goal is for each story to take approximately three hours to complete, so on any given day each developer should complete 2 - 3 stories.
It’s important for everyone on your team and ours to know how much time is being spent on the project, where that time is going, and how much it costs. To achieve this we use Toggl, a team based time tracking software solution. Each of our team members uses the Toggl desktop timer throughout the day to track their time down to the second, and assign their time entries to clients and Jira stories. Then at noon each day you automatically receive (via email and Slack) a report that shows you how much time was logged the previous day, who logged it, which Jira story it was assigned to, and the cost, plus the month-to-date time and cost totals for that month. This level of automated reporting ensures that you’re never left wondering
Weekly Check-ins. For our larger projects, we usually have weekly check-in meetings each Monday, where we update your team on everything we completed the previous week, and everything we plan on completing in the current week. These weekly meetings are a great way for us to update everyone on your team at the same time, and for your team to ask us questions as a group. And when possible, we’ll push up our work-in-progress to our staging servers, and show you what’s been completed and how it looks.
Example: Here’s a picture of the FullStack team meeting with WillowTree Roots for a check-in meeting.
Internal Project Management. In order to keep your project on track, it’s important for us to keep our team of designers and developers on track. To do this, we have daily, company-wide standups each morning at 9 AM. Each team member takes their turn explaining what they completed the previous day, what they plan to complete that day, and if they have any blockers (things other people need to get done before they can complete their work). If there are blockers we put together a plan to overcome them as soon as the meeting is concluded. Each team member’s daily goal is written down in our goal tracking software, and referenced during the standup the following morning. If everything goes according to plan, these daily goals add up to weekly project goals (also know as a sprints), which add up to monthly goals, which add up to project milestones, which add up to shipped products. How do you eat an elephant? One bite at a time. How do you build awesome apps? One daily goal at a time.
Here is where we see how your app behaves in the “real world”. Even the best code will have bugs, so it's imperative that your application is put through its paces by trial users prior to launch. Beta testers often include the final users of the software, who will use a trial version of the app in much the same way they intend to use the final version.
Sometimes the beta process will be broken into a private beta, where only invited users get to test the app, and a public beta, in which anyone can log on and play around with a beta version of the software. This process will undoubtedly uncover bugs, as well as missing critical features, which will need to be addressed and/or added prior to the final launch.Example: Once version 1 of TableBank was built, we were ready to start testing. We started by having everyone at FullStack use the app at the same time, and try their best to break every feature. This uncovered a few bugs that we were able to quickly fix. Next, we had the team at WillowTree Roots test the app in our office with our help, then in their office, without our help. Once this was complete, WillowTree was ready to test the app in the field. They flew a team to Kenya, where one of their manufacturing and education centers is located, and trained a team of 18 women on how to use the app. This user testing generated a lot of positive feedback from WillowTree’s users, who found the app easy to use and navigate.
After months of hard work and dedication, the big day arrives and we launch your live application! Corks are popped, confetti is thrown, and backs are slapped. It wasn’t easy, but that’s the point. As John F. Kennedy said, “We choose to do these things [go to the moon], not because they are easy, but because they are hard.”Example: After making a few small adjustments after the field testing, TableBank was ready to launch and be used by other nonprofits. FullStack built a marketing website for the app, and the app was launched for public use.
Like any complex system, software requires maintenance. When you buy a new car everything (hopefully) runs perfectly. But over time, if you don’t change the oil, the engine will eventually breakdown and stop working. The same is true for software. The day will never arrive in which your application is 100% complete. A certain level of maintenance will always be needed, including:
Once users begin using your application, you’ll quickly realize that some of the features that you thought would be important aren’t really needed. And some features that you never even considered are critical and must be added ASAP. This is why it's important to budget for ongoing development upfront. Again, the best applications are always a work in progress, and are never really finished.
We are big believers in lean development methodology...which put simply is an approach to building software that emphasizes building the simplest version of your application (called an MVP or Minimum Viable Product). The MVP includes only the core, critical features of your proposed application (and nothing else). This approach is the fastest and most cost effective way to get your app in the hands of users, so you can start getting feedback and learning from their behavior BEFORE you start adding features.
Sounds great right? We understand that our clients want to be as cost-conscious as possible, while getting the best possible product on the market. That’s why we work closely with our clients to ensure that the MVP vision is consistent across the team. Our experience has shown that the more lean your initial offering, the more bang for your buck you’ll get in the long run.
Why is that? Because you won’t be adding superfluous functionality that, while it may seem like a great idea initially, isn’t actually what your users want. Why spend money on code that will ultimately be scrapped. Our clients have found that it’s best to start lean and spend money only on the super-awesome functionality that their users have proven they want.
Now that you understand how our development process works and our general philosophy and approach to building successful software applications, let’s schedule some time to talk about your project.