How to be a program manager
joelonsoftware.com
joelonsoftware.com
-----------
Joel Step 1:
You start at the highest level: a vision statement, no more than one page explaining the gist of the new feature.
Fried Step 1:
So what do we do in place of a functional spec? We write a one page story about what the app should do. If it takes more than a page to explain it, then it’s too complex.
-----------
Joel Step 2:
Once that’s nailed down, you can develop storyboards… mockups of the screens showing the user’s progression through the application, with detailed notes showing how they work.
Fried Step 2:
Then we begin building the interface — the interface is the functional spec. First with some quick and simple paper sketches, then directly into HTML. Unlike paragraphs of text that are open to alternate interpretations, interface designs are common ground.
-----------
He's opposed to BAD functional specs, which is fine, but too many people read his title and decide it's OK to skip to writing the code first.
The theory there is that written documents will always be out of date, incomplete, stale, and open to multiple interpretations, so we might as well just accept that the face-to-face communication is infinitely higher bandwidth and will have to happen anyway and not waste the time trying to write it all down up front.
So if the PM needs to spec for their own edification, that's fine: do whatever works for you. But I, as the developer, will trust the PM themselves as the source of truth as to what the feature should do, and it's the PM's job to know what they want well enough to answer my questions real-time as I'm building.
On the other hand I've also had the unhappy experience of wading through dense, arcane specification documents written in stilted language ("the system shall...." ad nauseum) that are ultimately not much better.
In the end I think what this illustrates is that writing a good, concise, clear, complete functional specification is not easy. It requires a talented PM and no formulaic approach, whether it is agile or anything else, can get around that.
It definitely still requires good product managers, but again the idea is that no matter how good the spec or whatever is you'll still always have questions, and it's better to just build that fact into the process and get people used to asking questions rather than having people make assumptions. And the best way I've seen to make sure that the PM has the answer to those questions is the estimation session, since if the PM doesn't know what they want well enough to answer the questions quickly as you develop, you'll find that out in the estimation session before anyone is tasked with working on the feature. That at least largely avoids the situation where a developer starts working on something and finds out the PM really didn't have a great idea of what they wanted after all, or that it's technically infeasible, which (in my experience) is just a really bad situation to be in.
The story approach still presents endless ways to screw up, but it's far better than any other approach we've tried over the last 7 or so years.
A complete, unambiguous, and functional specification is called a program. May or may not be "good".
The going back and forth that you describe as inefficient is where the collaborative creative act occurs, where you work with the person that needs a custom system to define what you can build for them.
The functional spec usually comes before the html code.
Sure, Fried treats his html code as a functional spec, but others who work differently would not be able to find what they are used to calling a functional spec.
Spolsky: "feature"
Fried: "app"
Suppose either is designing GreenfieldGloryApp - he might start with a one-page vision statement. He might then make some very high level mock-ups of scenarios. Maybe they would even be done in HTML. This is where they diverge: At this point 37signals would start building. Fog Creek would iterate 'specs' many times further by drilling down to feature or feature-set level functional specs. Each feature-level spec would start with a vision statement and then be fleshed out with mocks and "detailed descriptions".
I have worked with programmers who felt they lost all control because they were not driving the functional design. However, they did truly have control, as Joel points out, because at the end of the day they still own and decide the technical design which is generally better aligned with their unique skills.
Good functional design tends to be technology ignorant by being more focused on what something is going to do from a user's perspective versus how it is going to do that something behind the scenes in code (as defined by the technical design).
While a functional design can be written out as a spec, the technical design can be developed and evolve as you write actual code if you follow an agile, iterative style of development. I think writing a technical spec (not to be confused with the functional spec) and handing it off to junior developers is why people get turned off by the idea of creating documentation on how something is going to work by someone who is not going to be the one actually implementing it. (In Joel's article, it is what Charles Simonyi was trying to define as program manager.) Once again, this is not the same as someone who provides a functional design spec.
Alan Cooper's The Inmates Are Running the Asylum does a really good job drawing out and describing that distinction between the areas of functional vs technical design (although if I recall he uses different terminology to describe the two but the same concept nonetheless).
The APM definition of Program Manager (which covers a lot more than the software field) is someone who manages a portfolio of projects, balancing resources to deliver results. This is also roughly the definition that Wikipedia agrees with.
I agree with a lot of the rest though, especially: "It helps, as a program manager, to be pretty good at coding yourself. This is unfair. Program managers aren’t supposed to write code. But programmers tend to respect programmers a lot more than non-programmers, no matter how smart they are. It is possible to be an effective program manager without being a coder, but the burden of earning the respect of the programming team will be higher." That goes for Project/Program managers as well as Product managers.
This setup drove home his point for me, that The program manager and the developers have to be peers.
Joel wasn't their boss. He was just the spec guy ("program manager"). Still, he must have some serious smarts to land such a job - possibly great coding chops plus being able to communicate well. Rare.
The APM interviews and the essay were very nontechnical. They mostly focused on product design and consumer experience (not limited to web/tech stuff), as well as one or two about industry in general (which I was pretty crap at answering). The most technical APM interview question I had involved coming up with strategies for improving AdSense performance and helping suggest keywords to advertisers. However (if the technical interview that regular APM candidates get were like the ones I got as first-round engineering interviews), the technical interview is pretty tough. Not impossible, but harder than MSFT or Amazon first-round...probably on par with MSFT second-round. And as a CS student I found the APM interviews the hardest of all.
Maybe it is just as legitimate to say "Microsoft products are more functional than Apple products (designed by industrial designers) and more usable than FOSS (designed by programmers and domain experts)," and that is a better sweet spot for software design? For example, what software is better overall than Excel and Word in their categories, when both functionality and user interface is considered?
This middle ground results in weak consumer products like Vista and Microsoft Mobile. They aren't bad products, but lack the polish an industrial design-driven process could have produced. They also lack the technical depth that open source is producing. As a result Microsoft is getting squeezed from both ends.
Joel's products are similar: a good middle ground. Neither awe-inspiring (technical) or fun to use (design).
First, why do you think pragmatism is weird? As jimbokun pointed out, you're framing it as if it's OK to focus on either design or technical merit, but that trying to do well on both (which is what users actually need) is somehow undesirable.
I think your comment about "MBA-driven design" gets to the heart of your misunderstanding about what a PM is. Neither MBAs nor industrial designers are a substitute for PMs (most of whom are software engineers by training). Tell an industrial designer or an MBA to design Exchange's system for handling the million special cases that come up when handling calendar synchronization. What do you do when two appointments are modified concurrently? What happens on the server when someone deletes their local Outlook data file by accident? When do you treat two similar calendar events as duplicates, when do you treat them as separate, and what's the most logical way to let users resolve duplicates/triplicates? How do you handle the many confusions that arise from people traveling across time zones? Which attributes of a person's calendar should be stored on the server, and which should be customizable on each specific device? I know industrial designers and MBAs who work in the software industry, and they would tell you that this isn't their job.
You also say that the middle ground results in weak consumer products like Vista and Windows Mobile. These two data points are cherry-picked. I could equally say that this middle ground results in great products like Office 2007, SharePoint, Exchange, .NET, Visual Studio, SQL Server, and so on (not fair to limit this to consumer products, since Microsoft's biggest focus is on productivity applications. I could point out Apple's lack of success among business users, but I understand that this is not their strong suit and that's OK. Their ability to deliver for a growing set of high-end consumers makes them a huge success in my eyes.)
Not always, but sometimes.
cf. Marissa Mayer, Ev Williams, Joe Kraus, Steve Jobs (on a high level), etc.
In Fortune 500 hell we call it 'Business Analyst' (because in bizarro enterprise software world, users and what they do with your software is called 'the business').
In Agile/Scrum they call it the 'Product Owner'.
Point is that someone needs to keep the big picture in mind and serve the interests of the end-user, all while sweating the details from their perspective as well.
I had this experience at KL Group with the marketing department, who owned the requirements and the UI. Marketing and development were peers, which reflected the company's structure: Greg Kiessling and Ed Lyclama (K & L) were co-owners. Greg ran the business while Ed ran the technology. Steve Rosenberg, the VP of Development, used to echo another of Joel's sentiments: Whenever we were depressed, he would remind us that We own the compiler, meaning that nothing could happen with convincing, cajoling, or otherwise making Development a deal they couldn't refuse. Marketing and Development fought like wild dogs over the specs and shipping priorities, and we ended up taking over our market and making Ed and Greg wealthy men when they sold out.
A while later I worked for another company where marketing owned the requirements and UI, and the VP of Marketing executed a coup and got Development to report to him. The company failed shortly thereafter.
I'm not very interested in becoming a full on hacker but I want to help build programs and webapps because I feel I'm good at getting 'the big picture' and advocating for users/customers.
Glad I'm not the only one who isn't a Vulcan.