You've reached the internet home of Chris Sells, who has a long history as a contributing member of the Windows developer community. He enjoys long walks on the beach and various computer technologies.
Thursday, Jan 19, 2006, 11:48 AM in The Spout
I want a service that "rips" books
Assuming the Sony Reader is cool, I still won't have all the content I want and I certainly don't want to repurchase all of my books. In the same way copyright law enables me to backup my CDs and DVDs, I want to "rip" my books and comics for electronic use. I'd like the same technology that the Google and the Amazon folks are using to digitize existing books (the folks that litter USENIX with copyright materials must have a cool setup, too). My understanding is that, unlike CDs and DVDs, which are easy to read via computer, books are not, so I'll need a service where I can box up my books and send 'em for ripping, resulting in a shiny DVD filled with my words and images, ideally OCR'd enough to allow full text search. In fact, after a while, the book rip houses would have most books on file, so I'd only have to prove that I own a book and they could email me the electronic version, saving us both the shipping charges. In further fact, this is an additional service that Google and/or Amazon could provide, since they're already "ripping" the books they sell...
Wednesday, Jan 18, 2006, 4:22 PM in The Spout
I Hate Books
I hate that indexes suck and that they don't support full text searching across my entire collection.
I hate that I have to guess which ones I'll need or want so that I can carry them with me.
I hate that I need a light to read them, potentially bothering the driver or a sleeping spouse.
I hate moving them, making shelves for them and searching for them on the shelves.
I hate that I can't take notes in them -- not even the ones I own -- without breaking out into a cold sweat (although, to be fair, that's more about my librarian mother than the book itself : ).
I hate that I have to buy a book twice if I want to listen to it instead of read it (and I hate that there's no way to pronounce pictures or code).
I hate that if the local book store doesn't have a book, that I have to wait for somebody to deliver it.
I hate that my local book store doesn't have reviews of the book, whereas my on line book store doesn't let me flip to whatever page I want.
The one thing I don't hate about books is the content. That part triggers my thoughts and my emotions in me that are so strong, I put up with all the things I hate so I can get to it.
Why isn't there an iPod for books (is it because iBook is already taken)? Why isn't all print media, e.g. novels, poems, comic books, news papers, magazines, etc, available in electronic format?
Tuesday, Jan 17, 2006, 9:49 AM in The Spout
PM Skill #6: Be The Team Mom
In an ideal world, a PM would be able to get together with their team, lead the discussion 'til everyone agrees what they're going to do and while they're doing it, hang out on the beach answering the odd question on their smart phone 'til the work is scheduled to be done.
At Microsoft, we don't live in an ideal world.
Instead, we have roving bands of PMs prowling the halls looking for resources, trying to get things done. Because this is an accepted part of MS culture, people actually listen when a PM shows up at their door to pitch their idea and ask them to help. And, so long as it fits into the broad goals they've set up with their boss and their other commitments, and it's more fun then the thing they're supposed to be doing, they often say "yes."
This means that folks on your team often have multiple commitments that they have to decide between. It's like when you get married or close friends, you're going to have more than one family to visit at Christmas time. However, you have to put your blood relatives first, making them your top priority and squeezing in the other families when you can, e.g. Christmas Eve Eve.
As a PM, you have to know what the "blood relationships" are for each of your team members. Are you their second or third family? If so, you have to take "Christmas as celebrated on." However, if they're in your first family, then you take top priority and you should feel free to act like their mom.
Traditionally, it's the mom's job to make sure people are healthy and happy (doing stuff they like), making sure that they're eating right (getting pizza during late night coding sessions) and that they're getting special treats when they deserve them (public announcements praising their work).
Likewise, it's the mom's job to remind them of their chores (their task list), check their report card (make sure their tasks are up to the quality bar) and to guilt them when they forget Mother's Day (keeping up with the schedule).
As the PM, you're the team's memory, the catch-all for crappy tasks nobody else wants to do and the one that makes sure everyone is working well together. You're the glue and the conscience. If the teammates on your team aren't waking up thinking of tasks you want done and going to bed hoping they're making good progress on your tasks, then, according to MS culture, that's your fault.
So, make sure folks are unblocked and happy, but also make sure they're doing what you consider their top priority and that they're doing it right and one time. Trust that they're doing what they should be, but make sure they know what you think they should be doing and that they're doing it right.
The downside is that such a world doesn't scale without PMs at every level, but that's why MS has PMs, Lead PMs, Group PMs and Product Unit Managers, all of them acting as the mom for their families.
Monday, Jan 16, 2006, 8:11 PM in Fun
My Son's First Computer Program
Wonderful things happen when I tell me kids to stop playing video games and to stop watching TV (I try to limit them to an hour of each/day). I mean, aweful things happen at first -- you'd think I stuck a sharp stick in their eye. But, after the hollowing stops (and the pull the stick out), the imagination kicks in and they think of stuff to do. Today (they were home from school on MLK Day) John asked if he could write a program.
Now, as you may or may not recall (or as you may or may not care), I just moved a few months ago and I haven't built enough shelves to hold all my books yet, so my copy of Microsoft C# Programming for the Absolute Beginner, by Andy Harris (which I'd purchased in case this day every came) was buried who knows where. I scoured every book box stacked in the closet in my office and every book box I could get to in the garage before risking an antique painting and crawling behind four matteress to dig through the one box I just couldn't reach to find it (why is it that whatever you're looking for is always in the last place you look?!?).
Once I'd found it, I handed it to John so that I could ready the computer for his programming genius. I knew right where to go to get Visual C# Express and I loaded on MSDN Express and SQL Server Express, just in case (Mozart's dad got him more than one instrument, didn't he?!?). Of course, I got to the spot where I needed 1.7GB on the C drive (even though I was installing on the E drive) and I only had 1GB, so I had to clean the drive and uninstall a bunch of stuff, all the while John's pestering me, "Do I have to read this part called Intro? What's .NET? What does the C in C# stand for? I don't want to read stuff, I just want to do stuff!" Clearly, Mr. Harris had a different audience in mind when he used the phrase "absolute beginner."
So, after about an hour of searching and uninstalling, downloading and installing, and then showing him the difference between the development environment, the documentation, debugging and running, I was ready to give up the driver's seat and let John try his hand. Here's his first program:
using System;
namespace ConsoleApplication1 {
class Program {
static void
Console.Write("Hi, Mom!");
}
}
}
sigh.
Monday, Jan 16, 2006, 4:43 PM in The Spout
A Toast to WPF
Here's a review you don't get very often:
"Your WPF book is excellent. So good that I actually chose to read it instead of watching in flight entertainment from my trip to London in Dec... I liked it so much that I asked for some champaign, and continued to read it non-stop till I reached London from UK. Here’s a photo. Good job!"
![]()
I'm glad to here our book goes nicely with a glass of champagne, although maybe Parimal will change his mind when he sobers up or the jet lag wears off. : )
Monday, Jan 16, 2006, 10:49 AM in The Spout
PM Skill #5: Unblock Others First
PMs often come from the ranks of engineers who've been "promoted" (aka taken away from the code to go to meetings). Many fight this trend, reverting to their old close-the-door-and-solve-the-problem habits to solve problems, which, as I've mentioned, doesn't work at all well when you're managing a team.
Even worse, a PM has to do something that's very weird to most people -- they have to help other folks get their work done before they tackle their own work. I call this "unblock others first." This has implications:
- You have to be in constant communication with all the folks on your team via meetings, 1:1s, phone calls, IM, email, etc. However your teammates like to communicate, you have to be ready to receive and respond quickly. The longer you wait, they longer they're blocked and the further out your ship date goes.
- You have to learn to be interrupt driven and good at switching between tasks or you're never going to be able to swap into the tasks you're being asked to help with and then back into your own tasks. This is very counter to engineering work, where you have to be able to keep lots of ideas in your head all at once while you work on a deep technical task and interruptions are the enemy.
- You still have to balance your interrupt-driven PM time with your concentrated technical time, or you're never going to be able to stay technical enough to keep up with your team. This is the one I struggle with the most. How can I be responsive to unblock my teammates while still having uninterrupted time to myself for technical work?
This last question is the fundamental contradiction when you're a product PM and it's one that different PMs balance differently. Some swing a lot toward the technical and risk losing touch with their team and thereby building the wrong thing or missing their dates. Some swing toward the management, losing touch with the technology and losing the respect of their developers. Of the two, swinging too much toward the technology is the biggest danger, but only by a little.
I deal with this by trying to set aside at most a day here or there where I can ignore my team and concentrate on something technical, but I have a very hard time actually doing it. Frankly, I love the constant task switch that goes w/ PMing and I get bored if I go too long without it.
"Hi. My name is Chris and I'm a PM. Can I get a hug?" : )
Thursday, Jan 12, 2006, 8:50 AM in The Spout
PM Skill #4: Exhibiting the Behavior You Want
At our last team milestone, we had stepped up the pace in the last two weeks to make sure that we were done in time for a demo by one of our internal stakeholders (demoing your stuff is a wonderful way to communicate, but having other folks build on your stuff to demo their stuff is even better [so long as they remember to mention your stuff]). When we decided to step up the pace, I let everyone on the team know that I was available 24/7 until the demo, providing all my contact numbers. I was actively working on a chunk of the implementation, so I would send out status and check-in mails whenever I had completed something, often in the middle of the night or early in the morning (I didn't get much sleep for those two weeks). When folks had questions, I was there to answer them, day or night. I was working long and focused hours and I was making good progress against my goals to meet the deadline for the demo.
In other words, while I never once asked the team to double their work efforts, once we'd all agreed to meet the shortened deadline, I stepped up my pace, let them know I'd stepped up my pace and expected them to do the same. This is the same no matter what behavior you want, whether it's working long hours (only temporarily, though, else you'll burn out your team), showing up to meetings on time or getting powered sugar on your keyboard. Some individual members of your team may not change their behavior, but they definitely won't if you're not willing to.
Thursday, Jan 12, 2006, 8:21 AM in The Spout
Survey: The Future of Publishing
Karen Gettman, my editor at Addison-Wesley, called and asked me a bunch of questions about the future of publishing yesterday. After our discussion, she asked if I knew anyone else and I volunteered to put a survey up on my web site.
To answer this survey, send the questions below and your answers to Karen.Gettman@AWL.com. Also, include your phone number so Karen can call to follow up (she finds the phone conversations to be most illuminating when it comes to really figuring out how people want to get to info -- we spent a bunch of time talking about hardware and software for ebooks). Thanks from Karen for your help!
- How do you learn about things to keep current in your job?
- What questions have you recently had and how did you search for the answers?
- How do #1 and #2 work well and poorly today?
- How would you like your information "served up?"
- What part of content (besides the content itself) do you value the most (name of its creator, form factor, etc.)?
Wednesday, Jan 11, 2006, 2:27 PM in Tools
.NET 2.0 Breaks NTD
Charles Sterling, Developer Evangelist, points out a problem with .NET 2.0 and No-Touch Deployment applications over the internet (where "problem" = "breaks completely").
Wednesday, Jan 11, 2006, 10:32 AM in The Spout
PM Skill #3: Getting Things Done
Fundamentally, a PM's job is to get things done. If you're going to plan and ship while keeping your team happy, you've got to plan, ship and keep your team happy. All of this pre-supposes you can get things done.
Getting things done isn't magic. For example, I'm sure everyone reading these words can get something done all on their own. However, when you're a PM, you've got to lead a team to get something done and that's a little trickier. Here's what I do:
- Identify a problem, e.g. I don't like doing Sudoku with pencil & paper.
- Identify a solution, e.g. put Sudoku into Windows.
- Identify your customers, e.g. Sudoku freaks that would prefer a better experience than pencil & paper.
- Figure out the folks that care one way or the other, e.g. the people that decide what goes into Windows and pitch your solution, either convincing them it should be done or convincing yourself it shouldn't. In most cases, your solution will need to change a bit to match your agenda to theirs.
- If you still think it's a good idea, find the folks that need to approve of the work (it may be the same folks that decide) and negotiate what success looks like, e.g. a user of Windows can choose Sudoku from the Games menu of the next version of Windows and have a happy Sudoku playing experience.
- Find the folks that need to help, e.g. the people that actually puts things into Window, and plan the work, e.g. write Sudoku, debug Sudoku, test Sudoku, get it into the manifest of files that make up the Windows setup, etc.
- By now, you've got a group of people involved with your idea. At Microsoft, these people are called stakeholders, and form the team of folks getting things done, whether it's approving the work, enabling the work, doing the work or using the work. With these stakeholders, you need to schedule the work. Scheduling accurately is a whole other topic, but to get things moving, you basically need an owner for each and every task in your plan and you need that owner to commit to a date, e.g. you (the PM) bill spec Sudoku by 1/1/06, Bob will write Sudoku by 2/1/06, Pete will test it as Bob writes it, etc. Also, if the work is more than a month or so, break it into milestones so that people see steady progress.
- If these people aren't enough to get the job done in a reasonable time frame (as determined by your schedule), you'll need to get additional resources, either by hiring or convincing other people that already work with you to spend their precious time working on your idea.
- Now that you've got a set of tasks and a schedule, you need to execute. That means making sure everyone's got what they need to do their work, including time, tools, the right information, etc. This also means gathering information about how folks are doing and sharing it with the stakeholders (a lot of them, like your boss or his boss, won't be doing the work, but will care about it). Finally, executing as a PM means holding the schedule up in front of the individual faces on your team every once in a while and "motivating" them into living up to their commitments, where "motivation" includes encouragement, bribery, shame, nagging, reminding them what problem you're trying to solve so as to keep them on track, etc.
- When you've met your criteria of success (which will involve more stakeholders, time, tasks and/or resources than you thought), ship it. Do not forget this step! I know it's silly, but unless you've got an ever-decreasing list of tasks that shows you're getting closer to a real ship date instead of further, you've lost one of your major executing motivations. In fact, getting close to a goal is so important for the health of your project and your team, that you should have as much shipping in your schedule as possible, which is why must non-trivial projects are broken down into milestones, each of which you'll share with some set of your stakeholders, e.g. daily builds stay internal while betas are shared with customers.
- After you've shipped, don't forget to post-mortem. In fact, I like to do port-mortems after each milestone. This allows you to decide what went well and poorly so you know what to repeat and what to avoid in the future. In addition to increasing your team's knowledge so that you can do better next time (or at least not do any worse), the post-mortem is a great time to really highlight the team's accomplishments, making sure to point out the work that individuals did. People need to know that their work is appreciated. That's not to say you need to plunk down a chunk of Lucite on their desk, but a simple "thank you" with specifics in front of a crowd goes a long way.
As an example, after the 2005 PDC, I wanted to make sure that Avalon and Indigo worked very well together. Obviously, that's not something I can do myself (I have check-in rights to neither team's source code). I'm not done with this work yet, but here's how it's coming along:
- Problem: Avalon and Indigo didn't work together during my PDC talk as I would've liked.
- Solution: Getting a set of Avalon/Indigo technology samples into the SDK (a technology sample is minimalistic, the SDK already has a bunch of Avalon/Indigo application samples, which attempt to show something more akin to real-world usage).
- Customers: Developers using Avalon and Indigo together.
- Pitch: I made my pitch to the people in charge of the SDK samples for Avalon and Indigo. They liked the idea and became my first stakeholders. They also reminded me that WinFX included Workflow, which quadrupled the pairings of technologies, i.e. from Avalon/Indigo to Avalon/Indigo, Avalon/WF, Indigo/WF and Avalon/Indigo/WF, and required an extra stakeholder. They also reminded me that I'll want to get someone from the SDK team itself involved, because I'll want to make sure there's a special section in the SDK samples that lists integration samples separately from the individual technology samples.
- Success: A set of samples that show the "right" way to integrate the technologies and meet the standard sample bar of quality, e.g. they compile, they run, they pass FxCop, etc. This definition of success reminds us that the problem isn't that we don't have enough samples, but that the pieces of WinFX don't work together well enough, which is why getting architects from each technology into the room together to decide what's "right" (and changing the technologies appropriately) is the real job. Getting samples into the SDK is just the thing we're doing to motivate this activity.
- Plan: We've got a list of samples that cover integration scenarios, what technology pairing they each cover, who owns ‘em, who's authoring ‘em and milestone dates, e.g. code complete, architectural review, submission, SDK drop release date.
- Schedule: We composed the schedule by looking at the samples we wanted to do, picking the releases of the SDK that we wanted to hit (different releases had different features that we wanted to integrate together) and then backing it up from their, i.e. if we want to hit the Foo CTP, the submission deadline is n, we'll need m weeks to turn around architectural feedback, so we need to be code complete and have the review on n-m, etc.
- Resources: Remember that this project started with just me, but now includes a decision-maker (or two) from Avalon, Indigo, Workflow and the SDK as well as sample authors and point people to get individual tasks done. In addition, there's my boss and the bosses of all of the folks doing the work that have to approve how folks spend their time, all of whom have to be kept informed and can have input to the process. Some folks are part of the team because they were convinced of the importance of the work and some are part of the team because their bosses were convinced and asked them to participate, but none of them work for me. It's common for a PM to run a project composed entirely of people that don't work for them, so sharpen up your people skills.
- Execute: We meet semi-weekly to make sure we're still on track and to identify any addition tasks and owners, e.g. adding the new section to the SDK, etc. Also, I'm the author of a bunch of the samples, so I have to meet the deadlines personally. As the PM, if I don't meet my own deadlines, I've got no leg to stand on when I ask others to meet theirs.
- Ship: We're coming up on the first code complete deadline, which was delayed a bit because we needed a stable internal build of a WinFX CTP that we're targeting to have the first set of samples placed into. Once we get the first set running on the right CTP, we'll review, fix problems in the samples, file architectural issues we discover in the review process as bugs against the individual technologies, submit the samples to the SDK team for their quality check and out it goes!
- Post-Mortem: We haven't done this yet, but I things I expect to see come out of it is how to keep this work going. There are lots of combinations of technologies that we promote at Microsoft and there needs to be a way to make sure that they work well together, which, after all, was the whole point of this exercise.
Tuesday, Jan 10, 2006, 4:55 PM in The Spout
A Mac that runs Windows?!?!?!?
Holy shit! I Macintosh that runs Windows!!!
"After Jobs' presentation, Apple Senior Vice President Phil Schiller addressed the issue of running Windows on Macs, saying there are no plans to sell or support Windows on an Intel-based Mac. 'That doesn't preclude someone from running it on a Mac. They probably will,' he said. 'We won't do anything to preclude that.'"
I can't tell you how long I've waited for a laptop built by Apple running Windows built by Microsoft.
Tuesday, Jan 10, 2006, 4:39 PM in Fun
The "Famous" Book Fight
So, I read Rory's latest comic and laughed. A lot. However, I haven't posted it because I figured anyone who'd be amused would've already seen it.
And then I got a ping from a marketing friend of mine who'd seen it and wondered what I thought. Granted, he's a marketing guy in the IT field, but still -- he's a *marketing* guy. I mean, I don't read their bait & switch blogs, so what's he doing reading our geek-out blogs?!?
Rory, dude, I expect to see you in Time magazine one day. Don't forget the little people (even if they need help carrying their ego : ).
Friday, Jan 6, 2006, 2:51 PM in .NET
Larry O'Brien on WPF
Suddenly, I think Larry O'Brien is smart:
"The book, in this case, is Chris Sells and Ian Griffiths' 'Programming Windows Presentation Foundation.' Sells and Griffiths are two top-notch authors, who separately wrote two of the better books on Windows Forms. This book, published by O'Reilly and adorned with a Kudu engraving, probably does about as good a job as possible in introducing a new display framework that is intended to replace, well, everything from User to GDI to GDI+. And, it seems clear, to replace Flash as well."
You go, Larry!
Thursday, Jan 5, 2006, 7:58 PM in Tools
Bindows: Windows Implemented in AJAX
Holy User32 in a browser window, Batman!
I don't know what it's like to use an app built this way, but looking at the samples blows me away...
Thursday, Jan 5, 2006, 9:51 AM in The Spout
I'm really digging live.com
I've tried all the portal sites at one time or another (yahoo, google, etc), but none of them have ever stuck 'til now. Since I gave up on subscribing to blogs, I find myself surfing to two sites every day: slashdot.org and live.com. I like getting the news headlines and I really like the gadgets (not one, but *two* versions of Wahoo! [both of which end in "tris" for some reason...]).
It's not perfect (the menu on the left obscures some text, there's no auto scrolling while you drag and it doesn't seem to like my smart phone), but it's definitely "sticky," at least for me.