ArsDigita Archives
 
 
   
 
spacer

Job Description for Programmers

Our Mission Statement defines an ambitious Goal for each Member of ArsDigita: "to become an internationally famous Web developer capable of managing an entire project from start to finish."

Realistically, whether or not you become "internationally famous" has less to do with your programming skills and more to do with the company's ability to find good clients, so we programmers should focus on the latter part of the goal, i.e., becoming "capable of managing an entire project from start to finish." Accordingly, the most important part of the programmer's job is delivering projects or, in other words, launching sites. (This statement does not apply to toolkit programmers.)

Running a project

What does it mean to "run a project" in concrete terms? Does it mean that you, as a programmer, are responsible for all of "the elements of a typical ArsDigita project" (as defined in the Compensation Principle section of the Mission Statement)? No, it does not. As a programmer, you are not expected to:
  • land the contract
  • host the site
What does that leave? A lot.

  1. Working with the customer
  2. There is no layer of full-time business analysts and project managers at ArsDigita to insulate you from the customer, so you are expected to:
    • understand the customer's goals (what they want to achieve) and strategy (how a web service will help them to achieve those goals)
    • understand the customer's constraints: when they want to launch, how much money they have to spend (which translates into how many programming resources their project will be allotted)
    • use this understanding (in concert with your experience and your knowledge of the toolkit's capabilities) to define a minimum launchable feature set, in collaboration with the customer
    • review the project plan with the customer, to set the expectations as to the basic sequence and timing of the project work (if the customer needs Feature X by Date Y for a meeting with VCs, then your plan had better account for it), as well as who does what (us or them)
    • keep the customer involved once the coding begins: solicit feedback on features of the site as soon as they are available (start using the Ticket Tracker early); make sure the customer is getting what they want
    • keep the customer informed about the actual progress you're making; it's inevitable you will not execute the project exactly as planned, so let the customer know what adjustments you need to make (use your judgement here; don't waste their time with minutiae)
    • track not only ArsDigita deliverables but also the customer's (e.g., content, graphic design, payment): help them to avoid missing deadlines by clearly defining what's expected well in advance and then following up with reminders as the deadline approaches; when they do slip, communicate the consequences of the delay on the project as a whole, ideally with suggestions for how to mitigate the impact
    • manage scope creep: if the customer has a "great, new idea," evaluate the amount of work it will require to implement and then -- assuming that it's not trivial -- help the customer decide for themselves whether or not the new idea is truly a "must have" for the initial launch; if they believe it is, then make sure that they identify what other feature(s) they're willing to sacrifice in order to get the new one in, or work with your team leader to determine whether it's possible to add resources to the project at an additional price
    • work with other contractors (e.g., management consultants, graphic and UI design firms) as if they are customers too; determine at the outset who is responsible for what decisions and who else (besides the ultimate decision-maker) needs to be involved

  3. Building the site
  4. The foundation of ArsDigita is our excellence as programmers, so it should come as no surprise that you are expected to:
    • write a clean, well-engineered data model that adheres to standards
    • design a user interface that makes intelligent use of the database and adheres to standards
    • write clean, well-engineered code that is readable, adequately commented, robust, and adheres to standards
    • understand why the consistency that results from adherence to standards is so important
    • learn what you need to learn, e.g., even if you know Tcl better than SQL, don't blindly use Tcl to solve all problems, including those best solved with SQL; rather, crack open some O'Reilly books, fire up SQL*Plus, and improve your knowledge of SQL
    • help junior programmers become productive, by training them, reviewing their work, giving them timely feedback, and (when time and circumstances permit) involving them as observers in all aspects of running the project, e.g., designing the data model, meeting with the customer
    • enforce a disciplined development process, e.g.:
      • use CVS for version control
      • perform and/or solicit data model reviews before starting to code
      • perform and/or solicit code reviews on a regular basis
    • write documentation for two audiences:
      • the customer, who will use the admin pages to operate the site
      • other programmers tasked with maintaining and enhancing your code
      Comments in the code are not enough; you also need to produce ACS-style documentation (i.e., an HTML page with sections for "The Big Picture", "Under the Hood", etc.) for all major modules of the site, even if they will not be rolled back into the ACS.
    • leverage the toolkit whenever possible, enhancing it if need be
    • fix bugs in the toolkit as you encounter them
    • identify any features that are worth generalizing for inclusion in the toolkit and actually build them as "ACS-ready" modules, making sure not to divulge any of the customer's proprietary secrets
    • post bug fixes and toolkit improvements at http://photo.net/ticket/
    • seek help when you need it; don't flounder (striking the right balance between self-reliance and knowing when to ask for help is one of the hardest parts of this job)
    See the Developers Guide for more details on writing high-quality software.

  5. Launching and operating the site
  6. To turn your big heap of software into a running, reliable web service, you need to implement the ArsDigita Server Architecture. You will find that much of the infrastructure is already in place (i.e., Unix, Oracle, AOLserver, the various ArsDigita monitoring tools) but it is still your responsibility to walk through the setup instructions, to make sure that the ArsDigita Server Architecture is properly installed for your service.

    If we built the site correctly, then the customer should have all the admin tools they need to manage the day-to-day operation of the site, but, inevitably, problems will arise that require our intervention. At the same time, we don't want to be leaping into crisis mode every time a minor bug is discovered. Thus, you need to educate the customer about our standard Alert and Response policy. When alerts do occur, respond to them quickly and take action to ensure that the same problem will not happen again.

    Finally, given our goal of building long-term relationships with our customers, you need to maintain contact with the customer beyond the initial launch, to help them capitalize on what's working and correct what's not. At a minimum, you should invite the customer to participate in our quarterly Strategy Review process.

Beyond project work

Aside from producing quality software, programmers at ArsDigita are expected to contribute to the company's other main goals: education and growth.

Education

In addition to mentoring our less experienced members, we want to spread the gospel to the world at large, through externally-focused teaching. At the moment, there are basically two ways to do this: (For those of us who aren't at locations where either the class or Boot Camp is being taught, the second option may be our only choice.)

Building the company

You can contribute directly to the growth of company by:
  • recruiting high-quality people to work with us
  • mentoring the people you recruit, to help them become productive as quickly as possible
You can improve the company's ability to grow by:
  • following procedures where they exist and make sense
  • suggesting ways to fix procedures that exist but don't work very well
  • defining procedures that don't exist but are needed

General expectations

It's pretty much impossible to do this job well unless you are:
  • good at solving all sorts of problems (new problems don't intimidate you; rather, you use analytic thinking to decompose the problem and, more often than not, solve it quickly)
  • self-motivated (when you run out of tasks, you start thinking of what else needs to be done, instead of waiting for more tickets to appear; as mentioned above, you learn what you need to learn to succeed)
  • reliable (you keep the promises that you make, both to the customer and to your colleagues)
  • independent (you're able to produce results without requiring constant supervision and hand-holding)
  • helpful (you're willing to take time out of your day to teach a teammate something new or to help a teammate crack a particularly hard problem)
  • responsive and flexible (you're willing to do things not explicitly listed in this document if needed)
spacer