Skip to content

Posts from the ‘Software’ Category

think different, just like everyone else

Something unexpected has happened at Apple, once known as the tech industry’s high-price leader. Over the last several years it began beating rivals on price.

via The New York Times

20111025-103523.jpg

the latest iPad

Apple used to compete by being the most polished device on the market. That polish cost extra, but to the Apple faithful it was worth it. Apple has moved to the head of the price wars almost by accident. Because of it’s relentless pursuit of minimalism in it’s product lines, by making the decision for the customer of what is “best” they’ve been able to zero in their focus and hyper optimize for a small set of products. I’ve covered this topic before, and here we start to see Apple reaping the benefit of this approach. They have enormous negotiating power with their suppliers based on the size of their orders. It’s much easier to negotiate a better price on components if you are buying 10 million, rather than 100,000. Once you know the market is there, and your initial investment is not a very risky one, you can be a bit bullish and increase your minimum order size.

The interesting paradox here, is that Apple has often pitched itself as being “different”, but when you look at the variation available in it’s product lines, you’ll find a lot of brushed aluminum but not a lot of variation or difference between their products. Because of their design ethos, they’ve come up with “the best” way to accomplish a task and once that “best” method has been identifier, there is not much point in allowing variation. From Apple’s perspective, why would they let people choose a smaller battery if they have already decided which CPU best fits the current price point and size of 11″ Mac Book Air.

You can see more evidence of this philosophy in their current low priced phone offerings. They won’t bother selling you a stripped down version of their current iPhone that uses cheaper components. Instead they wait for the prices to drop on those components considered “best” a year and a half ago.

As Apple sells more and more units behind this philosophy of minimalism they are starting to find themselves in a position where their customers can no longer claim to be “Different”. If you want different, get a Windows Phone. Seriously, they are getting great reviews.

Is this a bad thing for Apple? Not at all. You can only capture so much of the “different” crowd before you are no longer able to be different. Your success alienates you from a portion of your original audience.

Feature Request: Trello and Fogbugz list consolidation, aka You can only have one boss

I have an idea for a feature enhancement to my two favorite project management tools. To set the stage: let’s ponder the following question. “What should I work on next?”

An individual can only divide their attention so many ways. Some are better than others, but a working set of anything more than 4 or 5 is unrealistic. The only way the extend this working set is to begin working off of a list. By building a list we are able to mentally “shelve” a piece of work until we are able to address it fully. Lists are fantastic productivity tools, instead of an interruption we simply put it on the list to be prioritized later.

When it comes to the real world, different types of tasks call for different types of lists. One reason we see so many different todo list management programs out there (don’t remember the milk, omnifocus, toodledoo, etc…) is that everyone approachs list management from a slightly different viewpoint. Software development is no different, and while there is also a great proliferation of software management tools I have yet to see a software project management tool that acknowledges and addresses the truth that the way most developers approach writing features is significantly different than how they approach fixing bugs. Those two primary tasks require different types of lists.

Sit down and watch a Project Manager while their team is in bug fixing mode, and then watch them when they are designing and implementing new features. The workflows are often drastically different.

Fixing bugs requires a lot of list management, sorting, filtering, categorizing, and bulk editing. The barrier to entering a bug needs to be low, and there needs to be good workflow automation to ensure that bugs don’t fall through the cracks. Often we are watching the list, assigning cases, tracking cases written vs. resolved vs. verified, in different functional areas and across priorities. A few high level charts help us see the big picture above the churn of the individual cases, but we need to be able to easily drill down to see if a specific concern has been addressed.

Organizing new features requires a high level of flexibility and visibility, along with the ability to attach design specs and user stories. Sitting down with users and doing interviews, capturing brainstorming sessions and fluidly adjusting priorities as new competitive possibilities emerge.

Great, so we’ve got one tool for bugs and one tool for features. No problem… except for one tiny little… hiccup. A developer can only really pull from one list at a time. As soon as you give someone two lists you have given up your ability to prioritize. Not only have you given up some control, but you’ve introduced an additional hurtle for the developer. Each time they complete a task, the developer needs to ask: “From which list should I pull my next task?” If I am required to stop and answer that question every time something is completed, what was the point of building the priotized list in the first place?

The result of this multiple list model is often that bugs get batched into discrete phases in software development. Developing features happens first, and fixing bugs happens second. Even if the bugs already exist, they are prioritized below the bugs. This is because you can really only work from one list at a time.

So how do we solve this problem?

I believe the solution is to allow users to create a Trello card checklist from a Fogbugz stored filter. With the appropriate cross product linking. How should that work? I dunno exactly, presumably it should work like an embedded version of fogbugz inside a trello card. Something that lets me batch up bugs and integrate them into the feature workflow. I’d like to be able to tell my developers, as quickly and easily as dragging a card to a list, “hey, fix these 10 bugs before you get to that next feature” without them needing to hop back and forth between products to see what they should do next.

There are 100 ways to do this wrong, and probably 6 ways to do this right. And the brilliance isn’t in the idea, but in the working bits at the end of the day.

mountains are actually 100 little hills

via flickr user ItzaFineDay

There have been a lot of metaphors used to describe software project management. Waterfalls and Spirals are both pretty common metaphors. In more recent history we’ve started thinking of teams as being agile and their work as being sprints. I haven’t heard any great metaphors for the act of project planning though. I’ve come to think of it as slicing a mountain up into a million little hills.

When engineers are thinking of how to solve problems (which is most of the time) they tend to think about “everything” it will take to bring something to reality. This is a great trait, and it is present in all great software developers. They are the ones that will respond to “can we add feature X to widget Y” with 200 reasons why it won’t work, and 2 great alternatives that would work better instead.

The unfortunate side effect of this skill is that sometimes engineers will look at a big problem like “create an operating system designed to run in the palm of my hand” and their internal todo list creator will overheat. They’ll start at step 1, see something attainable, move on to step 2, 3, 4, 5, and somewhere around step 75 their brain will overload and the problem will go from something that is possible but difficult to impossible.

The key for a project leader is to take that mountain of a project and turn it into a sequence of little hills that are all individually attainable and when finished will lead to the top of the mountain.

Sometimes this takes the form of compartmentalizing. “Let’s ignore the wireless syncing feature for now, presume we have a connection, how can we synchronize the data once the connection is established”

Sometimes it means creating a path that the developers can walk down with you. “Yes eventually we’ll have to rewrite this entire module, but what if we just rewrite this small part now and wire the old one and the new one together in the meantime?”

Sometimes it’s about talking about the view from the top of the mountain. “Imagine how great it’ll be when we do finally rewrite this old Basic code in Java?”

Sometimes it’s about obscuring the mountain top. “We don’t have to rewrite everything, just these two modules for now, and then we can get this version shipped.”

The key in project management is to know the developers and know the project well enough to choose the right strategy at the right time.

Step one is always taking a good long look at the mountain…

Siri is the iPhone 4s killer feature for motorcycle riders

via flickr user Al Pavangkanan

At first glance the iPhone 4s is an incremental improvement from the previous version. The pundits have blasted it as being a boring, yawn inducing, upgrade, and as an iPhone 4 owner, I had agreed with them. Until I acquired another piece of interesting technology and in the process, uncovered the iPhone 4s’s killer feature.

The Scala Rider G4 is an in helmet bluetooth device that lets the rider communicate with the outside world from the back of her motorcycle. I was motivated to pick up the G4 before a road trip down to Oregon so I would have a handy way to listen to music, and accept the occasional phone call on the 5 hour ride. The G4 worked perfectly, except for the occasionally miscommunication between myself and the iPhone itself. The iPhone 4s uses the old school voice control app which is usable, sort of, but it’s nowhere near perfect. I’ve gotten in touch with a few old friends unexpectedly (Matt Andersen and Mike Andreessen sound really similar…)

Enter Siri

If I’m completely honest, I believe Siri to be kind of a parlor trick, fun and flashy but somewhat useless for a majority of tasks. Off of the bike I get the most use out of Siri when I grow weary of trying to tap out long messages. Dictating to Siri instead of entering text via the on screen keyboard can be a huge time saver. The integration with Wolfram Alpha is fun but not earth shattering. Dictating reminders is nice. All periodically handy features that have an equivalent, likely superior alternative.

Unless you ride a motorcycle.

On a motorcycle you have this fantastically capable device in your pocket, that you simply can’t make use of. Sure it’ll play music, and if someone calls you, you can answer, but the metaphorical road runs out after that.

The true excitement behind Siri is not what you can do in your office, or at home, but what you can do between those places.

I will have Siri read texts to me while I’m riding. I’ll dictate responses back to her. If I feel like listening to some music, I can ramble off a command to shuffle some high rated songs and Siri will figure it out. If I have a random factual question that is bugging me, or something I need to add to a shopping list or todo list, Siri will help take notes for me. The list goes on and on.

I think Apple is stepping into a big void and offering a solution to a problem for which no one has taken ownership… what do you do about all these phone related car accidents? How do we help people take their eyes off their phones and put it back on the road?

Texting while driving? I have no reason to do that anymore…

How to organize anything: Trello

via Flickr User alborzshawn

I’ve been organizing projects for a number of years now. Originally I was simply organizing my own efforts as a software developer, putting together a todo list so I wouldn’t miss anything or skip a step. When things at the company got bigger I started dabbling with Microsoft Project, and started making gannt charts left and right. While they were useful during the initial planning stages of a product and helped get a general feel for how much time we had to devote to certain features, once the project started, the meticulously laid out project plan quickly got out of date. Without employing a full time project manager to track status and deadlines we were never able to keep up with the project plan. And since we would rather have added productive developers than management overhead, we reduced our planning to a simple excel spreadsheet that was straight-forward to update.

That worked fine for a year or so until we added more developers. At this point we needed something that was flexible, easy to use, and highly visible. That’s when we started using the agile development method of 4×6 cards pinned to a cork board. Don’t laugh. That a software company would use such a decided low-tech approach is certainly amusing, but honestly it just seemed to work best. It was easy to write new cards, it was easy to organize them, everyone could see what was being worked on, and the spacial limitations naturally limited how many cards could be up and in flight at any given time.

We ran with that system for years, augmented with our internal fogbugz installation for bug tracking (bug tracking and fixing doesn’t work well on cards).

Enter Trello.com

Since their launch back in early september our company has been using Trello to manage our development workflow for one simple reason: It’s easier than 4×6 cards. Yup, finally, after 6 years of working with 4×6 cards, I might actually have found a good replacement. Trello does a great job of modeling that simple workflow even though they are adding additional power.

The difficult part of a designing a piece of software like this is not so much how many features you add, but which ones you leave out. The magic is in keeping the product simple and flexible enough that people can devise their own workflows using the basics in the product. The fact that there are only three real concepts in Trello is what makes it so amazingly powerful. You have Boards, on Boards you have Lists, and on Lists you have cards. Boards can be anything, lists can be anything, and cards can be anything. You can assign someone to a card, and you can make notes on a  card, the same way we used to do with 4×6 cards with post-it notes. You can label cards with color coded labels, the same way we did with colored post-it notes. And you can move cards from list to list, the same way we did on the cork board for all those years.

We put together five boards for our group, Backlog, Up Next, Doing, Testing, Done, but these could easily be split a number of different ways.

If you add the concept of priority by making the order of the cards significant (you don’t need to order them in a significant manner, but the cards retain their order) and you’ve got pretty much everything you need for a fully functional project management system.

Our migration to Trello happened very organically. I recently had a planning session with our Team Lead and took a bunch of notes on my white board. It was on my todo list to transcribe those notes to our cork board. I had procrastinated for a good day or two when I got word about Trello. Rather than transcribing and updating the cork board (which was in the other room) I made cards in Trello and invited the development team. One of our testers jumped on it and started using it immediately (within minutes) and by the end of the next day everyone was on board.

To hear a bit about Trello from the creators:

If you’d like to learn a little more about the creator check out this interview. It should be required watching for any software entrepreneur.

Remote Syncing with Omnifocus

A friend recently asked how to get Omnifocus setup to sync with multiple devices. I had some trouble remembering myself so I thought I’d put the instructions in a more permanent form here. If you haven’t heard of Omnifocus it’s a great personal task management system. It follows the “Getting Things Done” philosophy of breaking your todo list up into multiple groupings based on the “context” in which you are able to accomplish the task. So instead of working on a project, you work on “anything I can do while I’m in my email client”. If you want to learn more about getting things done you can check out the book.

I use the WebDav settings in OmniFocus in order to let all of my devices sync even if they aren’t connected to the same network. Omnifocus has the ability to sync over the local wireless network, but since I do a lot of syncing from the iPhone, which is not always connected to the wireless network (there are some dead zones at the office so I usually leave it connected to 3G) so I prefer the webdav option since the devices don’t need to be on the same network.

There are multiple different paths you can follow to configured your devices, this is the one that I found works for me. Omnifocus has some tools that will help you configure multiple devices but I found that they don’t always work reliably and I had to learn how to configure everything manually.

Omnifocus is also building out their own sync network, but since it’s currently in beta, I’m not inclined to recommend it yet. When they do get it setup it will simplify these instructions.

Step 1: Setup a webdav system.

I use www.swissdisk.com since they offer a free 50 megabyte account which is more than adequate for omnifocus.  Remember your username and password because you will need them in the setup of all omnifocus devices. As in signing up for any free service, be careful about the information you give them. So far I haven’t had any problems with swissdisk, but online companies can change their terms of service and they may start spamming you in the future when they find their business struggling. I wouldn’t rely on swissdisk to backup your Omnifocus database either. Make sure you are syncing your iPhone to your mac and using Time Machine or another backup system to keep old copies of your Omnifocus database. Omnifocus does a good job of keeping it’s own backups and their support department can help you restore things if anything goes wrong. (trust me on that one)

Step 2: Setup Omnifocus Mac

In Omnifocus, open preferences (Command + ‘,’ ) click not the sync tab, and then the advanced sub option. It should look like this.

Notice the location field, that url will be the same for you, except where it says ‘username’ you will need to use your username. Once you have entered the location click the sync now button and Omnifocus should ask you for your password. Let the process run and you will now have a copy of your omnifocus tasks on the swissdisk webdav server.

Step 3: Configure your iPhone

Open Omnifocus on the iPhone and open the preferences dialog. (the gear looking icon the lower right hand corner). Select the Sync Method option, and on the following page select WebDav.

On the next page enter the same swissdisk url as you used in Omnifocus for the Mac.

Click the sync button in the upper right hand corner, and your iPhone should prompt you for your password.

At this point you should be looking at your Omnifocus tasks from the mac on your iPhone.