Big day tomorrow – the heatsink for my dev server arrives. I probably won’t get a chance to get all of the hardware installed and linux running until next weekend, but I’ll definitely try to get the heatsink installed, and at that point I’ll be able to rest knowing that there are no further (hardware) roadblocks towards getting this thing built.
So, this dev server is going to be a catch-all-in-one machine for everything I need to support my development process. This means:
- Raid 1 storage, ~500 GBs worth. At some point I’m going to have to get really serious about making sure my data doesn’t get wiped out, but for now a single machine with mirrored drives should guard against non-acts-of-god. Of course, now that I’m actually writing this out it occurs to me that if I’m actually starting a MicroISV I’ll need to protect my source code and all other data as if it were my first child.
- Source control server. I’ve been using Subversion at work for about three years now and it’s been more than sufficient. However, I’m curious about what some of the new distributed version control systems, such as git, are like. I may give that a try.
- Web Server. I’ll be doing web development to compliment my iPhone development, so this will be a necessity.
- Database. Any serious web development is going to require a database. I’ve messed around a bit with MySQL, though by no means enough to have learned why it is any different than any other SQL implementation. I’m thinking about going with Postgre SQL, since that’s what the cool kids seem to use.
Anything else? I was sure there was plenty more that could be of use to, so I decided to refer back to the Joel Test to get some extra ideas. Of course I already had version control checked off (or, at least, to be checked off), but I can definitely add on a bug tracker (Bugzilla?) and possibly some kind of continuous integration software that would include daily builds, though since my server will be linux-based I don’t know how that will be possible for iPhone development. That much may have to wait until I get a dedicated mac dev client (i.e. mac mini).
I’ve always been a fan of the Joel Test in theory, but I’ve never had the clout to get it instituted at work, nor have I had a pet project to enforce it on… until now. The thing is, I’m wondering how many of the Joel Tests are relevant when you’re a one-man, bootstrapped (i.e. zero funding) MicroISV. So, I thought I’d consider each one:
1. Do you use source control? This is a big ‘duh’. I can’t imagine developing without source control. This is a must.
2. Can you make a build in one step? Part of me wonders if this test scales in importance with the number of developers working on a project. If it’s just me, does it matter? And that’s about all I can say on this matter, since I’ve never been part of a development team where daily builds were part of our process. I’ve read about the benefits, and, again, in theory, I’m all for it. So, if for no other reason than “I’d like to get some experience with this,” I’m going to give this a try. It may not be continuous integration (at least not for the iPhone part), and it may be some batch file (or Mac script equivalent) that I hack together, but at least I’m going to do something.
3. Do you make daily builds? This is almost a 2a, because if you can make a build in one step, isn’t it nearly trivial to create a daily build? Much like #2, I would guess this matters more as the number of developers on a team increases, but I’ll still give this one a go.
4. Do you have a bug database? Here’s an interesting one. If you’re the only developer (only everything, for that matter), you know all of the bugs, so you don’t need a database, right? Nah, not buying that one. Keeping a bug database, besides being good for record keeping and general organization, frees up the part of your mind that would otherwise have to remember every bug. I’ve had time working both with and without a bug database, and working with a bug database is far superior to working without one. I haven’t investigated the available (free) options out there right now, but I would imagine it would make sense to have a bug database system that also integrates in your spec, schedule, feature requests, and possibly customer requests/feedback/etc. I’ll have see what’s out there.
5. Do you fix bugs before writing new code? Great question. At my day job (all of those aforementioned ‘work’ references) we’ve just started a scrum process whereby the development process for multiple releases overlap. As an example, when version 1.0 reaches its (feature-complete) alpha stage, where (in theory) only bug fixes are being added to it, the development for version 1.1 begins. There have been some nasty problems with working on multiple releases in parallel, but my guess is that our process hasn’t been completely figured out yet, not that the concepts behind the process are inherently flawed. This process, which I think will ultimately be successful for us, does not strictly require that all bugs are fixed on the current release before the next release is started on. So long as bugs for the current release are ironed out before the next release hits its alpha stage, I think that roughly conforms to the test. Of course, we don’t (currently) have a bug database, so how are we to know that all bugs have been fixed? Yeah, so this one is pretty dependent on #4. Anyway, with my one-man shop, I’m all for producing solid releases that are as bug-free as they can be, with time dedicated to polishing a X.0 release so that an even better X.1 release is done before I move onto the new version.
6. Do you have an up-to-date schedule? This one may be tough for me, as my hours towards this project are basically ‘whenever I can find/make time’. That said, it’s fair to have a calender-independent schedule with up-to-date time estimates. I can pledge to do this one.
7. Do you have a spec? Some developers may be able to keep their entire project in their heads such that they don’t need a spec. I am not that develop. Additionally, I’ve never written a formal spec at my day job (are you getting the impression that my company has a low Joel Test score?) so I’d love to get some experience under my belt.
8. Do programmers have quiet working conditions? I’ll be real here: at this point, at least 50% of my time on this project is done on the bus, to and from work. Ever ridden a bus? They aren’t exactly quiet. In all reality I fail this test, and that won’t change until I can dedicate significant amounts of home-time towards the project.
9. Do you use the best tools money can buy? Ha! In truth, if/when I get a mac mini as a dedicated dev client, I’ll be 90% of the way there: I have a 24″ LCD en route to my apartment for my development setup, and my favorite keyboard (MS Natural 4000) waiting for it. I could get a better mouse than my current MS five button one, but the only significant upgrade would be to get a wireless mouse. For iPhone development I can’t imagine developing on a new MacBook Pro (or those crazy Mac Pro workstations) would be any better than a MacMini. iPhone projects are so small that build time is near negligible. In case you’re wondering, my current mac is my work computer – a first generation Intel-based MacBook Pro. It’s snappy as all hell, and its specs are basically that of the current mac mini (sans the video card, which, again, will hardly be an issue for iPhone development). I guess you could rephrase this test as ‘are you limited by the tools you use?’ because that’s the whole point of ‘best tools money can buy’ right? For iPhone development, I think I’ll be fine.
10. Do you have testers? Now we’re getting to the tests that get fuzzy for a one-man shop. Testers? You mean me? The truth is I had better have at least some alpha/beta testers before I release. Luckily, my girlfriend has offered (and is actually excited) to try/test out my initial release before I release it. I should probably mention that my first product will be a basketball score-keeping application, and she’ll be testing it out by keeping score for my rec league basketball games. How awesome is that?
11. Do new candidates write code during their interview? This is going to be the only test I’m going to declare ‘Not Applicable.’ By construction, I’m a one-man shop. If I get to the point where I have revenues that allow me to pay another developer, well, I’ll cross that bridge when I get there. That said, I’m completely on board with having candidates write code during interviews. Can you imagine an applicant for a head chef job not cooking during the interview?
12. Do you do hallway usability testing? For a one-man shop, this is the ‘grandma/mother/girlfriend/non-techy-friend test’ – show the UI design to somebody other than yourself and have them comment on it. For me, this is the most difficult test to pass because my ego likes to tell me that I’m right and everybody else is wrong. This will be tough, but I’ll do my best to pass this test.
This was a fun thought experiment, but the truth is that I’m just barely getting started with my project, never mind the company as a whole. So, I should do a follow-up post in, say, two months and report on where I stand. For now, here’s where I’m at:
Tests passed: 1 (Best tools money can buy).
Tests failed: 1 (Quiet working conditions).
Test N/A: 1 (Interview candidates write code).
Tests I plan to pass in two months: 9 (everything else).