7 Questions to Ask When you Start a Software Project
When first getting a software project up and running there are a number of questions you should ask yourself and your team to make sure your lined up for a project that can adapt to your growth. This means being ready for the internal and external changes to your teams and requirements that are going to happen quickly.
Most teams try to build these processes from scratch after they’ve already been developing for a while and it ends up delaying projects by a significant amount.
If you answer these questions for yourself before you write a line of code, even though you won’t know the whole set of processes right away, you’ll be ahead of the game and ready to adapt to your future quick growth.
What are your development processes?
Development processes are kind of the dreaded bane of inexperienced developers as they see them as these overbearing time slowing things. However if you set them up to be flexible and agile what your doing is getting ready for the changes that are bound to come quickly.
Development processes at the early stage should be light and flexible while creating a framework for quick decisions that lend to your growth. The following are the five areas you should have development processes for immediately.
- Team Internal Communication: The team should know a basic pattern for talking internally to ensure that requirements are being met across the team consistently. A great framework for this kind of communication is the Scrum framework in agile.
- Team External Communication: This sets up bounds and channels for communication from other teams (e.g. sales, testing, ops, etc.) and customers to the development team. You want to do this to keep the communication consistent and keep your developers working quickly towards your goals. Again the Scrum framework is great for laying out a basic paradigm for this.
- Technology Selection: You should layout guidelines for adding any technology to your stack, this includes who’s making these decisions, license bounds (i.e. is it ok to pul in GPL technologies, can you acquire commercial licenses, etc.), system requirements, desired direction.
- Standards: Setting up a basic set of coding and communication standards early gets your entire team moving in the same direction as well as preparing for the inevitable shift in team members.
- Repositories: Where will your code be stored and will it be private, public or somewhere in between. Also where will communication and processes be stored so they are a quick reference for everyone on the team.
What quality control (QC) processes do you have in place?
A basic QC process will set you up for consistent success from day one. QC is the process of testing your project internally and can consist of:
- Unit Tests: Tests of individual parts of your codebase to keep regressions from messing up future builds
- Manual Tests: To make sure the look and feel of your application are consistent.
- End-to-End and Integration Tests: Tests of all the parts of your application working together in an environment like your production environment, ensures your not going to deploy your application to production and brick your customers.
What quality assurance (QA) processes do you have in place?
Where QC ensures that what you built works as designed. QA determines if you built the right thing.
Here you’ll want to have some process in place to capture your users input as to wether what your delivering is the correct thing and helping them to solve the problems they have you for.
Some good ways to go about this include:
- Customer meetings
- Exit surveys for customers that stop using your software
- A good mechanism for users of your software to report issues
This set of processes should feel familiar to those following Lean methodologies as the business development/customer development aspects of product/market fit will fill some of the same role as QA and visa-versa.
What is your deployment strategy?
This should include what services you’re going to use to help with deployment such as:
- Continuous Deployment Service
- Hosting Platform
- Development, Testing, Staging and Production Environments
- Delivery from your source repository to deployment service
Figuring out a plan for this now will make it so that when your ready to release to your customers your systems will work the same way each time.
What is your provisioning strategy?
So for this I mean how do you decide to stand up new hardware to handle your application and once you’ve decided what’s the procedure to do this.
You can start simple by having a simple process that the decision maker goes through and then the deployment person just manually stands up a server. Later on you’ll probably want to automate this and there a great tools to do that like:
What is your issue tracking process?
Issue tracking goes hand-in-hand with your QC and QA processes. At some point your internal resources or your customers are going to find things that don’t work the way they expected.
You’ll need a way to track who found and issue, so you can tell them your response to it. You’ll need a way to prioritize these issues. You’ll need a way to work through and complete these issues.
It may seem like a good thing to do in email or through a google spreadsheet but this quickly becomes un-manageable so I’d highly recommend considering one of the following:
What is your customer issue tracking process?
If the issue comes directly from a customer you need a way of determining the priority of that issue with your other needs so you need a way to track like issues and figure out how many of your customers an item effects and to what degree.
You’ll also want a way to track all the issues you receive very your various customer communication channels.
Some great options for tracking this are the tools for issue management above or something like:
I’d highly recommend ensuring that whatever solution you go with make sure it links to your development issue tracking as well as your CRM.
So what other things do you plan out for your development teams and processes as your ramping up a new project?