If you haven’t seen it, it is Truth. Learn it, memorize it, evangelize it.
(maybe)
The Joel Test
- Do you use source control?
- Can you make a build in one step?
- Do you make daily builds?
- Do you have a bug database?
- Do you fix bugs before writing new code?
- Do you have an up-to-date schedule?
- Do you have a spec?
- Do programmers have quiet working conditions?
- Do you use the best tools money can buy?
- Do you have testers?
- Do new candidates write code during their interview?
- Do you do hallway usability testing?
We’re going to talk about #2.
Build
Let me paint you a picture:
You need to build two versions of app, one for French Guiana and one for France. Also, your app uses google analytics, google maps and some kind of crash reporting thing, all of which require tokens to access their respective APIs.
Being the Smart Developer you are, you don’t check your tokens into source code, because that would expose them to anyone who had access to your repository.
Instead, you edit the appropriate config files and add the token strings to the right fields. Your software repository ignores the changes to your config files so you don’t accidentally check them in.
You build your app for your default country, France, upload it to the app store and so on.
Now it is time to build it for French Guiana. Fortunately, everyone there speaks French, so no need to worry about translating anything (we don’t need no i18n!!1), so we just have a few changes…
- Bundle ID
- Google analytics tracking id
- Google maps api key
If we don’t use a different analytics tracking ID, it will be difficult to determine usage for each app. Also, we want to keep the map’s api key separate so if one app’s traffic spikes, it won’t affect the other app.
One step
To satisfy the Joel test, we should be able to build with one step. This means ONE command.
One easy way would be to use ISO 3166 country codes.
France
app-build --locale=fr
French Guiana
app-build --locale=gf
However we do it, it should not involve any manual steps to complete. This will decrease the chance of making any mistakes, shrink the learning curve for new developers, and ensure that every deployment is done the same way.