7 Questions to Ask When you Start a Software Project

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:

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?

Making iTerm2 Usable for Development

Developers Dilemma

Every developer has spent probably more hours than they want trying to get a terminal or console to work for their development style. I know I have spent way to many hours on this task and I finally found a system that’s working for me.

The problem for me has always been how do quickly get into a development environment and start working when I get on my computer. Then how do I just as quickly tear that environment down knowing I can pull it up quickly the next time I need it.

Tools like Vagrant and other offer great ways to get the operational side of this development environment up but unless you want to work in a heavy IDE like Eclipse I’ve always struggled with the authoring side of this problem.

That is until I started working with iTerm2 and SublimeText 3. Between these two tools I can quickly create new pieces of software and start whole new projects.

I know many of you are probably using SublimeText already so know what I’m talking about when it comes to getting up and running on a new project there. I’ve been asked by a few people though how do I just as quickly setup a savable environment in iTerm2.

iTerm2 breaks this into two parts Window Arrangements and Profiles so let’s get into setting these up for repeatable environments.

Profiles, Profiles, Profiles

Yep you’ve got to create a few profiles.

Open up the profiles menu from the iTerm2 preferences (cmd-,) go to the Profiles tab.

Most Wanted

I start with creating a Previous Directory profile. This is my goto profile for most windows as it will automatically go back to the last place it was when your restore a session that has this profile.

Name it how you want.

The only setting you need to have is the radio for Reuse previous session’s directory under the Working Directory subsection.


Development Bliss

I also setup profiles for each of my runnable tasks such as MongoDB.

For these you’ve got two things to set. First set the working directory by selecting the Directory radio from the Working Directory option and setting it to the directory you need run your command from

Now you need to add your command and any options to the Send text at start from the Command subsection.

Window Arrangements…

Window arrangements are the glue to a an easy environment in iTerm2.

To setup a window arrangement you must start from a blank slate, by this I mean close all open iTerm2 terminals (cmd-w).

Now we open the windows and start generating a dev environment. I’m going to walk through creating an environment for my current startup.

We’ll need runners for MongoDB, Redis, my application frontend server and my application backend server. We’ll also need a window for checking code in.

Create a new window (Shell -> New Window or cmd-n).


This is our canvas and now we’re going to draw the rest of the environment using the options to split pane.

First I split the pane vertically by right clicking and selecting split pane vertically.

I continue splitting vertically and horizontally until I have all the panes I need in an arrangements I like.

Note: you can drag the edge of any pane to resize it.

Next we’ll map these sessions to desired profile. Click on the little gear for each pane and select Edit Session.


Pick the right profile and then click Change Profile. Name the pane (this will show in the upper left of the pane).

Close this panel (the red button or cmd-w). Repeat for each pane.

Note: For the code pane I use the Previous Directory profile then move to the code directory before the next step.

Now we need to save this marvelous new environment by saving the window arrangement (cmd-shift-S or Window -> Save Window Arrangement). Enter a name and your done.

Let’s test that it works.
1. Close your arrangement
2. Window -> Restore Window Arrangement -> Your Arrangement



Your Tips

If you have further tips I’d love to hear about them in the comments section below.