I was doing first grade homework with my son yesterday. “This is a cat”, he read, and as he went letter by letter I helped remind him how “th” is pronounced. Then we got to the next line, “This is a dog.” And again he started sounding out the letters T-H-I-S, and again I reminded him how “th” is pronounced. But then I looked at him and said something like, “you know, instead of sounding out T-H-I-S again, you can take a picture of the whole word in your head, and when the next line comes, don’t see T-H-I-S, see THIS as a single image and tell me how it’s pronounced.” The third line, “This is a fox” he read almost immediately.
In software development we seem to make the same mistakes that a first grader makes in learning how to read. Each time we start a project there are things that need to get done, and each time we begin anew, somehow surprised that THIS web app will in fact need the services we just built out for the last one. A piece of me wants to blame agile methodology, which we love and use on all of our projects, but which has provided a handy excuse for any software developer who doesn’t want to do any forward thinking — it’s not in this week’s stories so we kick the can down the road.
As I hit this yet again, I wanted to put out there the basic checklist of decisions we make before even starting a project, rather than waiting for each stage to hit and then scrambling for the solution. Happy for constructive comments on other pieces that you might add:
* Names of environments
* Git conventions
* Continuous integration
* Facebook integration
* Server accounts
* Project management tool
* HTML/CSS conventions
* Transactional email platform
* Exception handling / reporting / managing
* Deploy environment
* Domain & SSL
* Analytics platform
* Application monitoring
* Server and process monitoring
My hope is that by starting a project with a list like this, we can avoid trying to figure out A-P-P-L-I-C-A-T-I-O-N-S hurdle by hurdle and with some forethought, become speed readers in no time.