A Superficial Review of TaskPaper (Cuz superficial is all my backlog allows)

14 12 2007

It doesn’t matter how much we complain about time, we’re not being realistic or honest about our use of it. Everyone gets the same amount every day; that is, if we’re getting the whole day. But asking for more time to do things has to strike someone as having too many things to do, and being grown up enough to abandon or postpone those things for which there isn’t time.

There are plenty of Time Management systems out there. Gettings Things Done (GTD) is a recent one with a lot of buzz and adopters. There are plenty of GTD software packages for those who prefer computer-based systems to paper, including two versions for Mori: Jeff Fisher’s mGTD plugin and Jim Harrison’s MoriGTD scripted system.

Now, I’ve had the audiobook for GTD for years but I’ve never listened to it. (I did at least listen to Merlin Mann’s David Allen interviews when I was on the road.) And now that I’m developing (and using) Mori I’ve even installed the mGTD plugin, but that was more for testing purposes than actually knowing what GTD was about (or how to use it).

So when Jesse introduced his own GTD app, TaskPaper, as a simpler way to getting things done with “paper-like simplicity” I was of course concerned that it would cannibalize Mori sales. But TaskPaper only manages tasks, not notes like Mori does. So unless your notes are one-liners used only to manage your activities, you’ll still need to grab a copy of Mori. ;)

But the real reason not to be concerned is TaskPaper is an awesome app in its own right. Jesse prodded me a couple times to try it, and even provided me with a license. So the next time I needed to jot down a task reminder, instead of using Mori, I opened up TaskPaper and gave it a try.

Now I have to admit, being both a GTD noob and a programmer, TaskPaper’s interface threw me at first. Let’s face it, any device with less than five buttons on it leaves me scratching my head. But I do know how to use an outliner. So with that interface in mind I set out to discover just how it was earning such wonderful reviews.

But TP isn’t exactly an outliner. It just uses an outline-like interface, and I emphasize that point. You’ll be productive very quickly, but I also got my list complicated very quickly by adding sub-sub-headings to my project. (But you have to expect that from a GTD noob and a programmer.) The beauty is that by using a very simple text editor/outliner interface, TP doesn’t complicate the ability to change your organization of tasks and projects. Nor does it complicate your ability to add extra info about the task (its metadata). Avoiding special columns and a form interface, TP instead uses the following special text characters to signify meaning: “:” for projects, “-” for tasks, “[tab]” to nest tasks within other tasks (which are themselves nested within a project), any non-reserved character for notes, and “@” for the interesting context.

Contexts are GTD’s way of giving you a way of lumping similar activities together. They aren’t necessarily part of the same project, but just things which are done at the same place (e.g., @home, @mall), the same type of activity (@computer, @phone), and so on. TP refers to them as tags, and uses the normal GTD syntax (I guess) to refer to them.

TP’s interface is very sparse, which means less clutter and distractions. It’s nonetheless powerful, letting you filter to a specific project or context. The point is to spend more time doing your activities than actually organizing what they are. And TaskPaper handles that beautifully (and elegantly). I now understand what the Hog Bay Notebook users have been clamoring for!

I also have a better understanding of how GTD works, even more so after I sat through the mGTD screencast put up by Jeff, which in turn helped me make better use of TP and GTD.

There are definitely some features I’d like to see added, though:

The UI signifies task completion by changing the text style to strike-through, but the only way to mark the task as completed textually is by adding the context @done or the keyboard shortcut cmd-D. (You can also mark it completed by clicking on the open circle in the left margin or the menu item “Project > Mark as Done”, but that requires lifting your hands from the keyboard to use the mouse. I would prefer some other delimiter such as “x”, or a checkmark to signify completion, just for continuity.

I’d like to see true tags supported, perhaps using Chris Messina’s “#” tag delimiter.

So while there are some features I’d like to see added for more sophisticated capabilities, for GTD noobs like myself (still) and those who just want to work and not manage yet another system, TaskPaper should be the first stop to GTD (and priority) mastery!

In time, I might become profficient enough at GTD to be able to use mGTD or MoriGTD. But for now I just need to start the “filtering the inbasket thing” to help things along. That, and redefine my understanding of the word “superficial”.



Mori, PIMs, Pricing and the Business of Software (Was Re: Mac PIMs in General (was NightHawk)

12 12 2007

A few days ago, there was a thread on the Macintosh PIMs group that descended into a diatribe against the current state of PIM software and the cost of software. In response, I wrote what turned into a very long, poorly-conceived, and most likely ill-advised response to some of the opinions voiced. Very few quotes are enclosed, as it’s mainly a response, not a rebuttal.

Please forgive what is sure to be a foolish action on my part, but nothing concerning the current state of affairs will improve by actively avoiding public discussion of the issues. None of my comments are an attack on the people whose comments I responded to, particularly db whom I responded to especially. Consider his remarks a proxy for a lot of the “it costs too much” complaints I see on sites like VersionTracker, MacUpdate, iusethis, and elsewhere on the Internet. And it’s with the intent to publically respond to those complaints that I choose to do so here, rather than the Macintosh PIM group’s mailing list. My apologies to the Mac PIMs group, and the rest of the netizens (although there are worse things one should unsee). With that in mind, here is Apokalypse’ contribution to the conversation. Your comments are welcome.

Ted Goranson wrote [Context added so his position is somewhat clearer. His remarks are included as Mori is mentioned. -- AG]
> the value added. Users who know nothing about development somehow
> expect the same, unreasonably low pricing scheme.
>
> These people, for example are why we don’t have Incontrol and
> Infodepot, why we lost MORE. Why Mori was all but lost.

db wrote:
> I’m going to try again (to change this topic ;-)
>
> Ted/Edward,
>
> I appreciate the understanding and constructive disagreement, however
> large or small, though actually I don’t think we really disagree about
> anything substantial, other than pigs flying. I have proof, from the
> state of Maine no less, which is the original home state of Mori and
> still the home of Mori’s original Developer, HogBay Software:
> http://sendbread.com/
>
> Mori got smart and moved to Florida, well before winter set in. I have
> no idea where the pigs went.

db wrote:

> And you expect Mori to get
> it right with a part-time developer.

Since there’s been some mention made of Mori of late, I believe it’s in the community’s best interest for me to stir things up a tad bit more in the hope that by sharing my experience as Mori’s owner/developer, a better understanding of the current state of the Mac software market might help to improve the situation for us as users and businesses.

And I know, db, that you like to constantly talk about Mori’s “original” developer, in a wistful (or rueful) tone, but the truth is Jesse wasn’t developing Mori when I purchased it from him, had lost all interest in continuing development months before, and never wants to touch Mori code again. This isn’t an attempt to be cruel, but to make the point with finality. If anyone has any bugs to report or feature requests they want to make, they’ll have to tell me. I’m the only one who’s responsible for the condition it’s in now, and the only one who’ll be able to make the necessary changes. I’m the one taking Mori into the future. Or to put it into less delicate terms, Mori may once have been Jesse’s little girl, but I’m making her a woman.

The Low-Baller Wins Myth

> There are some folks who will defend M$ pricing, or the price of an
> unlocked iPhone in Germany. That’s OK, but not me.

> If you recall, I am asking for a more modest personal edition price,
> to help the product succeed by increasing market penetration (and
> frankly, user goodwill) in order to make an integrated PIM available
> to more users. I’ll bet that your Mac and it’s apps save you $1000s
> more than they cost if you use them effectively in a work environment.
> But if Apple sold them at a price that more closely approached the
> savings gained by it’s users, users would have revolted and there
> would be no Macs. The Apple IIe saved me a ton of time in college but
> that doesn’t mean I would have been willing or able to pay two or
> three times as much for that option. My strategy is to charge as
> little as I reasonably need to and I’ll keep busy. If some fool wants
> to pay someone more thinking they must be getting a something better.
> Fine. I don’t like working for fools anyway.

> I think their is a marketing possibility that more at lower pricing
> will offset less at higher. Not everyone is a fool.

The problem with your strategy is it fails to account for shortfalls in sales volumes, changes in the market, and other unforeseen events; both corporate and personal. For a lower price to make a difference it has to be substantially lower, and for volume to make up the loss in margin it has to be several times higher. Selling 25% more of a half-off product won’t cut it. And when your target market is the price-conscious, economic conditions which impact their budget also impacts your sales. Wal-mart successfully, though unintentially, demonstrated that for us these past two years.

People spend 50-300% more for an Apple iPod than for anyone else’s portable media player. Not just 20-30%, but up to 300%! That’s two to three times more for a device to play songs or display pictures. The multiple is even higher when you consider the features lacking in an iPod which are available in other players. So you think iPod buyers are fools. I think your opinion that price is the main consideration for consumers is faulty. Or is there some special excuse we give Apple for pricing above the market, instead of “a more modest personal edition price”? (The iPod Shuffle furthers my argument, not yours, as the Shuffle is priced against Apple’s own products, not the rest of the market: it is has even less features.)

When you made that crack about me developing Mori part-time, I was insulted. But then I realized that, in all honesty, I am only developing Mori part-time. I’m also handling web-site duties part-time, which include controlling spam, updating the site software, touching up the databases, writing blog entries, performing backups, and preparing traffic reports. I’m also fielding customer support, whether it’s email, IMs, the fora, or bug/feature tracking. I’m also handling marketing, which includes contacting blog writers, contacting writers and editors in the media, preparing market plans, product literature, artwork, etc. I’m also writing user docs, screencast scripts, tutorials, and the like, in several languages. I might be doing all this, but my development work on Mori itself is, as you say, strictly part-time.

Most software developers in the Mac market are small shops. MicroISVs. Indies. Whatever the term, sometimes it’s a shop of two or three people doing product development. By far, though, the bulk of the product developers today are one-man shops. Somebody working solo. And that solo developer typically doesn’t make enough to support himself on his products’ sales. It usually doesn’t matter because these indies are usually students or employees of another company. Their product is just something they whipped up for their own needs or interests, and they decided to offer it for sale to make a few bucks (just like the Apple story we’re all so fond of).

However, I’m neither a college student nor employed anywhere else. I’ve even turned away contracting offers due to the backlog of development tasks. So I have to question what your beliefs are when I read your crack about my work on Mori as nothing more than part-time in the same paragraph where you complain that Mac software is overpriced, and how small shops can’t afford market research!

A Cowboy [Coder] Isn’t A Landowner

> I think many (not all) of the little one-man shops fail because they
> lack the willingness or ability to see or use the advantages of
> cooperation with others. They sometime simply want to be in charge,
> their own boss, and see cooperation, of course, as giving up control.
> That’s the way it is when you work with others. Unless they have such
> a big hit that allows them to hire others, they’d be far better off
> cooperating with others. Look how many GTD and info management apps we
> have from very small shops. Few have a chance at decent success
> working alone, and especially when competing with the larger shops
> which simply engender more consumer confidence because of their size,
> never mind having more resources to begin with.

Now you’re finally saying things I can almost completely agree with: most indies want to strike out on their own so they can be their own boss. The problem is most lack the chops to do it. Being intelligent in one field, many assume they know what it takes to be successful running a venture entirely on their own. Being socially awkward, many are too untrusting of others to risk venturing with them. Indeed, many realize the likelihood is that any new venture will go belly up in less than five years. Though most entrepreneurs fear personality clashes with potential partners, the most common cause of failure is insufficient resources.

What incentive does one developer have to cooperate with another? to give his source code and a promise to share profits with a competitor? I’ve repeatedly attempted to persuade other developers to work with me, but loved as I am for my winning personality and disarming smile, I’ve been unable to convince them to abandon their products and support mine instead! Crazy, no? Perhaps they need some sort of compensation for their investment in their product and their customers; some security or other evidence of the legitimacy of the deal, and its probability of success. Would having a bankroll improve the likelihood of him joining me so that we “have a chance at decent success”? How do I accumulate this bankroll with your strategy “to charge as little as I reasonably need to and I’ll keep busy”? While being a low-price leader may be a marketing strategy, volume isn’t proof of commercial success. Long-term commercial success is dependent on your money being busier than you.

There are a couple of your comments that undermine your entire “more modest personal edition price, to help the product succeed by increasing market penetration” fallacy. One is, “Unless they have such a big hit…” Unless? So you admit the chance of that happening is slim. And if the chances of having a big hit and the volume that it creates are slim, then prices will have to remain high to stay in business. Also, if you think having a low price will guarantee a big hit, you are guaranteed that a competitor will come along and undermine your sole competitive advantage with an even lower price.

The other comment debunking your assertion is, “…larger shops which simply engender more consumer confidence because of their size, never mind having more resources to begin with.” Without the margins and volume to build up your resources, how do you expect to engender more confidence in consumers?

If you don’t make enough profit with the early adopters of your program, you’ll never last long enough to develop the additional features, user resources, documentation, etc. to be purchased by the mainstream. In addition, your organization will likely implode due to an inability to adequately provide service for your customers.

You probably have a larger selection of PIMs to choose from now than ever before, so why aren’t you satisfied? It’s because they aren’t as powerful or feature-rich as the old ones were. You’d say they lack the quality, or aren’t of the same caliber as the old apps. I’m pointing out that, twenty years later, the apps are substantially less expensive as well; and they don’t get better because the developers can’t afford to invest more development time and money in them!

Road Closed Due to Growth

Do you know what it takes to add that power and those features you long for to the software on the market? It doesn’t take listening to the customer, because customers have been talking about their needs for years. It doesn’t take writing better docs, which people don’t like to read anyway. It doesn’t take promotional discounts or educational versions, which have a limited lifespan in effective marketing.

It takes engineers. Software engineers and time. Time to think about how the current product was architected. Time to think about what features need to be added. Time to think about what features can be added given the current state of the product. Time to design the code to add those features to the product. Time to code the features into the product. Time to test the code. Time to fix the code. Time to redo the steps again and again until it’s ready to be released. Or worse, until they run out of time.

Do you think engineers are given special treatment for all this wonderful code they’re adding? Do real estate developers or hotels put a roof over their head because they’re improving products? Are hospital visits, medical treatment, or even health insurance without a price because we’re indispensable? Do engineers get any food or caffeine of any quantity without charge because of their role in society? Or should they be required to sacrifice their own needs and wants for transportation, entertainment, family, etc. to fulfill some “higher calling”?

Someone who enters the PIM market as a business isn’t looking to scrape enough money to buy himself a shiny new MBP for Xmas. There’s more than just the cost to purchase equipment. Or pay electric bills. Or Internet access. Or to purchase technical books and journals. A business can’t just make enough to cover the salaries of its employees, its legal fees, its taxes, etc. It has to cover the cost to invest in growth: of its products, its corporate infrastructure, and its owners.

Someone has to foot the bill for all these things while time is being spent adding those improvements you want so much, whether it’s a VC, an angel investor, a spouse, family, friends, whatever; and that someone is going to want a return on their investment. You get a lot of turnover in this industry because these would-be entrepreneurs discover the return on their investment just isn’t satisfactory.

A competent software engineer can make at least $75K/year, even as a fresh graduate. For a 2080 hour year, your product has to bring in $36.06 per hour to cover his salary. His salary alone. If you don’t want him to work on development part-time, like I do, you have to pay others to do the marketing, technical writing, artwork, administering servers and websites, the business-administration-type stuff, etc. So, say you as the business owner make a worst-case salary of $80K, and your developer makes $75K per year. So after other operating expenses of $65K, and a 20% profit for the year, a business should bring in $264K. That is for strictly online sales without a marketing program. It excludes marketing expenses such as advertising, sales commissions, packaging, product literature, trade show exhibitions, etc.

That’s $129.513/hr in sales for a company to be comfortably profitable. (Oh, did we forget to deduct the processing fees deducted from sales by the payment processing firm? You can go out of business if you forget these details!) If we don’t make that, there isn’t a point pretending we run a business. And if you don’t have a business standing behind the software you use to manage your information, quit pretending to be surprised when it’s no longer under development, being supported, or that the features you enjoyed on the old packages will ever return in anything new.

Companies are bought and sold. So are product lines. Products with a sufficient revenue stream continue in the market, regardless of their origin. Products that aren’t worth the trouble die; regardless of how loved they were and how missed they’ll be. So if you’re not prepared to spend the money necessary to obtain a solid, powerful package now, then let time take its course. The part-time developer you’re supporting will either get the features added in there eventually, or drop the product for something more rewarding in his life.

Those who cannot learn from PIM history are doomed to re-key their data

Let me explain why there isn’t a strong third-party PIM in the Mac market. Future product development is based on past product development. Whether it’s the profits from past products, or using the codebase of previously engineered products (e.g., Cocoa and Carbon), one product is built upon others. And whenever someone gets the bright idea to write another to-do list or contact manager or agenda application, whether it’s to learn how to develop for the Mac, or because they have more time than money, they have to develop the basic functionality first. Then, they think, “This is so helpful for me, I bet other people can use it too,” so they make it available to others as freeware or shareware, presumably to others who perceive a similar lack in existing apps or possessing a similar lack of funds.

Then, his app begins to find users. Slowly, of course, because it’s new and the majority of people will let others be the early-adopters. But his app will find some users because it sufficiently meets their feature/price requirements. But! its feature set is shallow because he started from scratch. And! there are a few bugs here and there that need to be fixed. And! it doesn’t sync with Apple’s bundled PIMs. And! it lacks support for their phone or pda. He doesn’t have time to add innovative features because he’s too busy trying to catch up. Now it stops being just a hobby and starts to be real work. Then he thinks, I’ve got to get something more out of it. If he feels he can do it, he’ll start charging (more) for it.

Now there are people who don’t mind spending hours in front of a TV set, playing video games, or downloading and reading stuff off the Internet. It’s something to occupy their time. A way to unwind. Maybe someone likes to tinker with cars, spending months to strip down a junked Mustang and rebuild it into a street monster. It’s a nice way for him to while away the days. Perhaps when he’s finished he’ll just cruise the strip in it. Maybe he’ll street race. Maybe he’ll sell it off and use some of the money to buy another clunker and start over again.

Regardless of the number of times he rebuilds cars for fun, his mindset changes when he begins to treat it as more than just a hobby. His goals will be different. The decisions he makes will take on a whole new importance, and even the tools and processes he uses will have changed.

It’s the same way with software development: you can afford to waste time and money on it when it’s just for kicks. But when it competes with the rest of your life, when a child becomes ill, your spouse loses a job, or your kids are in college, those things that occupied your time are re-evaluated; and you decide whether or not it needs to be treated more seriously, and how committed you are to its success.

And businesses that were profitable in this market re-evaluate their returns due to the competition. They consider whether branching out to other product lines or other platforms will be more rewarding. Developers, large and small, let sales coast without active development. Eventually, their products are outdated, or the platform is (like Mac OS 9 or Tiger). Then some developer decides there’s no to-do list or contact manager or agenda app that matches his feature/price requirements, so he writes one from scratch…

And that is why the PIM market, indeed, the Mac software market in general, is so poor today, and only a few categories have clear market leaders.

As far as PIM goes, it’s obviously an inadequate term for the types of products that fit in that category. There are calendars, to-do lists, project planners, address books, outliners, and on and on, but Mori is specifically a digital notebook app. And while users and developers can add agenda, contact management, GTD, file management or even wordprocessing and spreadsheet functionality through the use of scripts and plug-ins, it doesn’t come with the features typical of those applications. In fact, a lot of the design work I’ve been doing over the past couple of months has been to reduce the excess behavior in Mori and recast its feature set with an eye towards note taking and organizing superiority. Any additional behaviors will have to be the result of plugins. This means the plugin API will be more sophisticated though.

The point is, I’m not going to add features to Mori to handle all PIM needs. And I’m not going to cater to the notetaking needs of every Mac owner out there. Apokalypse will be focusing on the professionals who understand the value of their time, and demand software that delivers productivity gains that make them look good. SOHO users. It isn’t that I don’t appreciate everyone else, but I can’t afford to help everyone else, and the quality of the products will suffer badly. This is one reason why I’ve continued Jesse’s practice of sending prospects to other products, you can’t be all things to all people.

So, as a user of PIM products, figure out what your needs are. If you’re just looking to keep a list of your friends and family members’ contact info, track class activities or have the occasional sticky, the iApps bundled with the Mac should be enough. If your needs are more sophisticated and your time is a resource you use to produce money, find the software that will maximize your productive use of time in managing your tasks, contacts, info, etc. and purchase it. Even at minimum wage rates, you should recoup your investment within the first week!

If you want engineers and small businesses in general, and me in particular, to improve the quality of your life, you’re going to have to improve the quality of mine. How can we maintain a continuing relationship otherwise?



A Week of Fist Shaking at BOFH and Open Source Developers

6 12 2007

The past week was one of the worst in recent computer experiences I’ve had, surpassing the Leopard install. In fact, the last time my experience has been this bad was when I last fiddled with website software. I was going to abandon the whole server transfer/upgrade plan due to the issues the upgrades were causing, but I remembered the transfer itself should be fairly trouble free. I’ll only upgrade a minor version; not a whole version, which would require adding a lot of code to custom modules Jesse wrote. Should be.

I can appreciate the time and effort invested by those who work on open source projects, but developers who complain that users aren’t migrating to their latest efforts quickly enough are both arrogant and naive. Customers prefer to be able to continue using the data they’ve stored in the current versions to losing them when they migrate to the newer ones. I’m pretty sure it’s the same for OSS users. Much as I love writing code, I have enough to write already thank you very much. And I don’t appreciate having to spelunk through your code to figure out what those data structures you’ve added are supposed to do (”ooh, shiny, new!”) just because you’re too lazy to write the docs (”the code are the docs!”) and impatient to play with your new ideas.

Although the site I inherited from Jesse used a CMS system distinct and incompatible from the one I had selected when I started my own, I didn’t want to switch it around or try doing new things with it because I felt the continuity was better than taking the time to rebuild a site from scratch. But now I can appreciate Jesse’s decision to do such a thing. If I have to spend the downtime upgrading parts that already work well just to get the features needed for other modules, I might as well fix it to my own needs and ignore the chaos that OSS developers are creating in the system. Now the whole NIH question is thrown out the window. It’s no longer a matter of, “Oh, I can do a cooler system.” Now it’s a question of the developers themselves causing users to abandon their system. A question of distrust and self-preservation.

Hopefully, any remaining misconfigurations in the website will be rectified before a second person notices it.

If you sent an email in the past 24 hours (of 2007-12-05) and you haven’t gotten a response already I apologize, but you’ll need to resend it. My site host doesn’t transfer files, emails, settings, or the like between accounts; and well, it has probably been crushed by the lumbering floes. In fact, if you’re waiting for a response from me on any matter, please jog my memory with another email.

Anyway, at least the site now has some breathing room, and I can continue improving the products.



Mori: v1.6.7 Post-Mortem and Upcoming Changes

27 11 2007

Well, it looks like the latest toolbar fix has finally stuck. There were actually a few, very subtle interrelated items, and some procedural issues that cascaded into others. Code was shifted around hither and yon, resulting in elimination of two of a main class’ instance variables and simplification of logic in several methods.

Speaking of which, I’d really love to try out Xcode3’s new refactoring tools, but that would mean

  1. spending more time in Leopard, which freezes on me,
  2. and spending more time in Xcode3, whose text editing I already loathe.

I will need to investigate how well refactoring works in TextMate (which I already own and use from time to time when bumping against some other Xcode2 limitation.)

The pressure cooker development level of the past couple of weeks really put the development process here through the wringer. Some things held up. Some things fell apart. So more ‘behind the scenes’ development is going to take place here to minimize the interference caused by the mismatch between what needs to be done and what the tools require me to do next.

    Some observations of the release’s development:

  1. The primary, agile-based, processes were abandoned in the panic over the continued toolbar problems and Leopard incompatibilities.
    There was no established process for handling emergencies, so the chaotic edit-compile-test behavior resurfaced. This is not to be repeated.

    Corrective Measures: A plan of action for dealing with emergencies must be established. Exercises and drills prepared and performed so the proper outcome occurs next time.

  2. Users seemed to be unaware, or unconvinced, of my plans for Leopard.
    Although I had made statements regarding the planned support for Leopard, it was only in response to questioning by users. I had failed to provide information ahead of time and prominently.

    Corrective Measures: While users refer to the forum when there are questions or they have some issue to resolve, they refer to the blog constantly. It’s best to have already disclosed plans so users have time to assimilate needed info and prepare accordingly. Blog. Blog. Blog. Forum posting: link to blog. Then blog.

  3. Unit testing got skipped.
    It was unavoidable given the current process because tests didn’t cover the critical issue being developed: the user interface (i.e., toolbar items and empty windows).

    Corrective Measures: Mock objects are inadequate to sufficiently test the UI. For all my blustering that the UI is testable, it’s clearly time I seek or develop the necessary tools and put them to use.

  4. Subversion is a win, but it’s an ugly win.
    Being able to restore files, or the project, of a particular beta or release build, or of a particular date and time, is great. Being able to make wholesale changes to the project, then abandoning them, or keeping them along a separate branch to continue experiments at a later date without juggling project directories here and there, is great. Being able to merge or contrast multiple working project directories from separate environments (Tiger, Leopard, laptop, and the v1.6.3 release) quickly and easily, is great.

    Nibs saved as a smattering of files in the repository: not so great. Confusing subversion with its own metadata when copying/adding directories: not so great. Performing an add/delete when moving or copying directories and files instead of adding “move” or “copy” semantics to the system: not so great. Poor integration mechanism for multiple offline revisions: not so great.

    SCM is great. I’ve used CVS for years. I’ve even set up another project or two using Subversion before I bought Mori and Clockwork from Jesse. But I don’t see where it’s an obviously better package than CVS, but perhaps that’s because I’ve learned to work around CVS’ shortcomings. (Reviewing the feature list at http://subversion.tigris.org, the only practical feature I see that means anything to someone actually using Subversion is command-level manipulation of directories, although the handling of renames is poor. Hrmm. And svn+ssh access to the repository, with Xcode integration even!)

    Corrective Measures: For the time being, the messiness of the metadata in copies and moves will have to remain unsettled. As long as the structure ends up correct, and it doesn’t take long to get it to that state, it remains tolerable in the face of bigger issues. A procedure must be established to handle the circumstance where developers are offline and must “commit” in some manner which is transferrable to the repository when they are back online.

  5. Debugging is severely inadequate for professional-grade development.
    Can you tell Apple’s team has a severe case of he-man, mouse-haters club insecurities? (Either that, or they’re operating in crunch mode so much, they don’t have time to develop the appropriate tools. Nah!) The debugging facilities they provide for developers operate primarily through the use of environment variables, console output and functions and output which require gdb to access.

    ZeroLink didn’t work well and was abandoned; Fix and Continue is still problematic; and the vaunted debug libraries (to help you catch errors in the parameters passed to the AppKit and Foundation libraries) hasn’t worked right since 10.4.3.

    My own debugging facilities are rudimentary and lacking in depth. More of the failures in the field should be communicated back to me (remember Safari’s ‘bug’ button?). The crash reporting mechanism should work when the crash occurs, not the next time Mori runs. Also, exceptions are logged to the console, but otherwise go unnoticed by Mori and the user.

    Corrective Measures: Extend the runtime monitoring and browsing tools. Rewrite the crash reporting mechanism to activate when the application terminates. Add an exception handler which sends reports back. Develop proper high-level debugging tools for Objective-C, the UI, CoreData and Bindings. Coding takes place at a higher level. Debugging should be at least at that same level. -fobjc-gc exists for a reason. Take advantage of it!

  6. The build process is inconsistent, confused and unstable.
    The various plugins’ build settings aren’t consistent. Extraneous resources (images, sounds, etc.) are stored in the nibs. At times the build directory must be purged for a functioning executable to be built.

    Corrective Measures: A Build Settings Table has already been prepared and Mori and its plugins have had their settings documented. The settings for the Blocks plugins has yet to be documented. The effect of some settings has to be determined, which can then be propagated to the targets as appropriate. The project file should be purged of duplicated actions, unnecessary references, etc.

  7. Debugging Mori when it’s used for normal work results in too much human activity thrashing.
    Because the debug and test versions use the same preferences/file settings, the release version used for normal work had to be exited to avert data corruption in the notebooks.

    Corrective Measures: This issue was resolved with the Oneill branch. However, that uses a separate target to achieve its distinction. Some means of specifying a special bundle id for the debug and test builds must be developed to accomplish a similar effect, perhaps through preprocessing the Info.plist.

  8. Checklists are great
    Being able to state that processes are being followed, builds are complete, and updates were released correctly, is great.

    Corrective Measures: Checklists are great, but scripted procedures are better. Automate as much of every process as possible.

  9. To-Do lists, Getting Things Done (GTD), or whatever Time Management activity that is put into practice definitely helps.
    I’ve got the audio book. Mori’s got the plugin. I’ve got Taskpaper, too. I’ve got a Handspring Visor Edge and its Palm Desktop software. Something, anything, that helps track tasks that need to be done so nothing falls between the cracks is a plus. They are effective at keeping things moving forward, but I’m not efficient at it and a lot of discipline and effort must be used to keep moving things forward.
    Corrective Measure: I used TaskPaper to handle the tracking during this hectic period. I’ve got a blog entry in preparation, but basically, I found it a great way to get into the GTD system due to its simple interface. I must continue developing my understanding of this system to manage my activities, and see about getting the various software/devices integrated better.

Next Batch of Changes

I’ve already begun work on v1.6.8: Improved checking and repair functionality for notebooks. Correct Italian localization, thanks to Mario Pettenghi. The code for the Blocks framework will be tweaked so it compiles without triggering warnings (e.g., unused parameters, missing prototype, etc.). Additional unit testing for the UI, and refactoring of UI code.

These improvements to the code will set up the continuation of progress for v1.7, which should then be ready during the holidays. At least that’s the current goal.