New Job

by Tom Temple

13 November 2006

I finally found a job. I’m doing “development” for a company that is trying to do content management for high school and college kids. Think Blackboard or OpenCourseWare plus Myspace or Facebook but with more emphasis on collaboration e.g. posts/comments, forums or Wiki-style pages.

That is pretty darm broad. Right now we are still feeling out markets, as in “Who are the users going to be?” and “How do we make money.” Next (at the same time, really) we have to figure out what they’re going to want1.

The point of this is to ask for your ideas. I’ll have more specific questsions later but for now let’s just go with,

  1. Tell me about your dream site and,
  2. Tell me whether or not you were particularly pleased or displeased by anything in something that you use[d] (which for me might include, Blackboard, OCW, Facebook, Myspace, Blogger, Wordpress, Textpattern, MediaWiki, DokuWiki, Plone).

Thank you, I eagerly await your rants.

1 long digression In the software biz this is called “Requirements”, the phase when you decide on functionality. The next phase is “Design” where you say how you intend to meet the requirements. Finally the “Design” is translated into something codable, for instance, object design, protocol descriptions, timing diagrams etc. Then at the end, somebody writes some code.

For most people, the salaries involved with these tasts are somewhat counter-intuitive. The coding end is the end that looks like “work” while just imagining how it is going to work looks like the sort of stuff you dream up on a Sunday afternoon. But the money says that’s not right.

In fact, the hard end is the requirements. After that it is more or less a matter of translation. The closer you get to the coding end, the more mechanical this translation becomes. (The base level of coding has been handled by the compiler for decades. And the line is being pushed upward—for instance the auto-generation of code from UML).

It’s true that the translation implies an amount of refinement—to code something you need to be able to specify it with mathematical precision. At the same time, I would counter that at the coding end, the development cycle is much more tolerant of errors. This is because coding errors are of limitted scope and can be relatively easily fixed. On the other hand, an error at the design level might require than a large section of the code be redone and an error at the requirements level is typically fatal to the entire project.

Comments:

  • Michael
    Nov 13, 11:51 PM

    Since we already talked about the problem a bit at dinner today, I won’t go into that in this comment. But I wanted to respond to your digression about design and requirements. In short, I agree with you that gathering requirements and designing the project is much harder than actually implementing it.

    However, it is also dangerous to think of requirements and design as distinct phases of development that can happen entirely a priori, done and committed before code begins to be written. For a software project to be truly successful, I think it is crucial that requirements and design iterate throughout the project, around a short-turnaround cycle of design, build, accept, and review. To make that work, you need to get a few customers (or customer-look-a-likes) in to the process early on, and provide them with frequent small releases, get their feedback and acceptance criteria, and then back into the loop. The so-called “waterfall model” is dangerous, especially for a small business.

    The strength of a small and nimble development team is that they have relatively low communications overhead, and can afford to have frequent checkpoints with the customer (or a surrogate thereof). In this way, problem spots are very quickly identified and circumvented, and nobody gets too attached to any one “big idea” in the implementation.

  • Anthony Bramante
    Nov 14, 01:38 PM

    Having been a part of the process as a customer/customer look-a-like, I couldn’t agree more with Michael. When I was Trips Director Ase Thomas and I decided he was going to create a database application (in MySQL) for DOC Trips. It was going to be customizable on every level (trip type, duration, locations, automated bus routes, medical issue forms and summaries, emergency log, all online applications instantly integrated into the database, trip leader app grading by graders with limited access, etc). I assumed that all programming happens in the waterfall model: someone figures out what you want and then someone codes it. It wasn’t at all what Ase had us do, and it made a huge difference.

    Ase’s process was to create a certain portion, let me use it (and use it himself), get feedback, and then correct and expand. I was most impressed by the number of times he stopped and completely rewrote a section to gain some (seemingly, to me) small improvement in function. Also, there were plenty of instances where he’d ask me how I wanted a section to look and function, he’d create it, and upon using it, I’d realize that it wasn’t what I had wanted. Either because I hadn’t communicated effectively or because I didn’t fully understand what Ase was capable of doing, it was a huge benefit to be able to correct those design ideas during rather than after the fact.

    During Trips this year Ase apparently didn’t touch the database code once.

  • Emily Copeland
    Nov 15, 04:57 PM

    Mmmmmm, waterfalls. Tom Temple and waterfalls. Pretty much my dream site.

  • Cosmo
    Nov 16, 01:18 PM

    Tom, why do I feel like you’re trying to get us to do your job for you?

  • Tom
    Nov 17, 11:28 AM

    Not exactly, Cosmo. My job isn’t solely about determining what functionality we will provide, it’s also about providing it. Even if you gave me a complete description of what you wanted, that would only be one savvy person’s opinion, and the savvy market really isn’t our primary target.

    Even if I did go exclusively off your feature set, we would still have to decide how to organize things both at the front end and also at the back end. And finally I actually need to implement this thing.

    You are welcome to think that you are doing my job. On the other hand, a more realistic view is that you are giving me a data-point in a graph which is but one portion of what I’m trying to do.

    Just wait a few weeks and I’ll be begging you guys to go to Digiyou.com and play around and tell me what works and doesn’t. Then you can claim that you’re doing my job for me. Although I linked it, be sure to note that I’m not begging yet. The site there now is not the working version. And please don’t look for it on any other port until I give you the word.

Comment: