Skip to content


Delivering projects on time with LiquidPlanner? There’s an app for that.

Humble BeginningsWith the possible exception of the equator, everything begins somewhere. – Peter Robert Fleming

The Beginning

It was the beginning of the summer and I was sitting with Charles Seybold and Jason Carlson of LiquidPlanner to discuss the possibility of building a mobile application to support their SaaS project management system. It was fun to be working with Charles and Jason again — we’d worked together at Expedia while they were incubating the ideas that would lead them to leave Expedia and create LiquidPlanner.

From the beginning, the passion for the product and the details came through and we quickly sketched out and talked through an initial design for the application and the API (currently in beta) that would sit behind it to provide access to LiquidPlanner.  The team had a solid vision for what they wanted the app to do both in the initial incarnation as well as over time. Following the principles that launched LiquidPlanner, we focused on the functionality to deliver in version 1.0.

I headed back to the luxurious offices of Deep Focus Technologies, to work on turning the white board sketch into an initial set of wireframes so we had something more concrete to visualize.  More discussion, refinement, and a schedule in LiquidPlanner and we were ready…

wireframe

The project got the green light and I began work in earnest.  Back at LiquidPlanner, Brett had a super-early release of the API — we were almost ready to begin hooking things up.

The Technology

LiquidPlanner’s REST API is as easy to use as any REST API, but developing the app was made easier by a few of pieces of software upon which I relied heavily.

The first was my data framework.  For most of the summer I had been developing an application using sqlite3 on the iPhone that supported CRUD within the standard UI framework.  The application hasn’t been released yet, but the framework that sits under it keeps finding its way into released code.

The intention of the framework was to support a variety of data providers, all rendering and providing update facilities through a common set of code.  The first test: was the framework able to support a REST API instead of sqlite?

My display framework combined with Justin Palmer’s httpriot, had me up and talking to the LiquidPlanner APIs in less than a day.  Basic functionality quickly took shape, and over next several weeks the application became began to resemble the things we had planned to build.

Also extremely useful for developing this type of application was the combination of Todd Ditchendorf’s HTTP Client, Tuffcode’s HTTPScoop and some Apache request forwarding trickery.  This setup was my x-ray vision, allowing me to manually play with requests, as well as inspect the traffic to and from the iPhone emulator as it ran my code.  This visibility was invaluable as it could easily expose problems in the application’s messaging.

Working With the Team

LiquidPlanner has retained some of the habits that initially made our former employer what it was — rapid execution, focus and eating your own dogfood. This time, the dogfood was both the application and the API supporting it.  There are always challenges when working toward a moving target.  We used LiquidPlanner’s built-in chat feature and tasks to communicate changes, drops and track work items including a specific set of work items, rumored to exist, apparently called defects.

I enjoy opportunities to work with small, focused teams. There’s an experience of progress that doesn’t exist everywhere.  It seems that people who live in that world every day might sometimes forget what the rest of the world is like, but I doubt they’d want it any other way. Everyone focuses on the goal and there is little to get in the way of progress.

As the work progressed, I would spend a couple of days in LiquidPlanner’s offices, focusing closely on user feedback and interactive design/development sessions.  The rest of the week I was meeting with other clients or working at my home office.  Either way, the schedule required to run my business and make the expected amount of progress on the project required occasionally being out-of-sync with LiquidPlanner’s office hours. I relied on the information in the LiquidPlanner system to maintain connections between where I was and where others on the project were going.

As the milestones passed, the application became increasingly more functional.  The work and tracking I once did on the web app was soon working on the iPhone.

LP_shot_5

The software development process at LiquidPlanner revolves around the product; it is the product. Team uses the system to store documentation, for tracking defects and to constantly chatter about what is happening. They use it for tracking releases and making scope decisions as the work moves beyond the time allotted for the current sprint. The system has become the center of their process, and the iPhone app was designed to become a growing part of that evolving system.

The tool supported functionality throughout the business. Chatter between PR, sales and marketing communicated status on projects in progress.  Creative brainstorming and tasks for upcoming blog posts had their own places and schedules.  Work in progress and work waiting for a future start was all there.  If there’s work to be done, it finds its way through the system.

The Release

We developed and tested the app until we had the initial product goals finished and submitted it to the app store in October.

The only thing more rewarding than watching something grow from some scribbles on a whiteboard to a released product in a short period of time, is knowing that customers are using that software to make their projects easier to manage and to help their people be more productive.

If you’re curious about the system, LiquidPlanner offers a free trial.  You can hook your iPhone up to LiquidPlanner for free as well. When do you have to pay? Practically speaking, if LiquidPlanner helps you execute on your project plans efficiently, you only pay if you don’t use the product.

Posted in Products.


First Glimpse: Audiotron controller for iPhone/iPod Touch

A first peek at an upcoming iPhone/iPod Touch Audiotron controller program…  More to come.

IMG_0347 IMG_0346

Posted in Uncategorized.


How To Fail at Mobile

Mobile software development takes persistence and patience and an innovative spirit to succeed.  The number one recipe for success is release, understand feedback and observed measurements and iterate.  Some companies seem far better suited to this model than others ones, but clear expectations, vision and persistence can bring success to a variety of mobile strategies in a variety of organizations.

There are many ways to fail.  Here are some you can avoid with understanding, planning and expectation setting.

Which way?

Don’t Measure

If you expect to learn anything from your efforts, take the time to build in the hooks to appropriately measure your application.  Understand what people do, who those people are and how they relate to your mainline business.

If you propose to support transactions on your mobile platform, who are those custotmers?  Is a positive, but less than online conversion rate for customers good?  Some in your organization will slap one another on the back and assume that you’ve succeeded if you convert some, but less customers on your mobile platform.  Did you succeed?  Unless you understand your customers and your app’s usage, your results are inconclusive.  Be honest about the data and seek deep understanding.  If you don’t have the time to measure, you probably don’t have the time to succeed.

  • Are the mobile conversions incremental to your business?
  • Are the customers that “should” be converting in the mobile client, but not converting going elsewhere or to your “main” system?
  • If your mobile app targets a more immediate need, i.e. people need your product immediately because they are mobile, is accepting a lesser conversion rate for mobile transactions acceptable?

Get Caught in the Religious War

HTML5?  Native Apps?  Hybrids? determine a strategy and go.  If you believe mobile is valuable to your business, try to create that value.  Measure your response and continue to work on your pitch.  Technology rarely stands still.  If you’re waiting for your internal technology to be “ready” or waiting for some magical universal technology to make everything easy, universal, better or whatever there will be another glittering technology on the horizon.

Let App Store Comments Determine Your Fate

The app store comments will provide good feedback and terrible feedback all wrapped in one neat little package.  Don’t dismiss it and don’t take it too seriously, but struggle to understand the message.  In every one-star slam, there may be the kernel of improvement.  Understand what your customers want, rather than what they’re complaining about.  If your users seem off the mark, how can you educate them or get the app in the hands of the people it is targeted toward?  Bad comments may simply be the result of mismatched experiences and expectations.  Align the users and the application and perception will improve without writing another line of code.

Don’t Promote

Promote your application to the people you targeted it towards.  If you’re building a brand extension app for a specific purpose and have a channel to promote it to the people who will likely find it useful, use that channel.  You can stack the deck in your favor in terms of app store perception.  Research has shown that the expectation of a bad experience creates a bad experience, and conversely, the expectation of a good experience creates a better experience.  Get your app into the hands of the people who will have the best experience with it tell them what to expect and how the app will help them.

Don’t Iterate

If you don’t have resources to continue to make progress on the application, maybe you shouldn’t have started.  No application hits the market perfectly, and software never gets better without intentional effort, feedback and iteration.  If the comments show that you’re on to something for some set of people, figure that out and make it better.  If you miss the mark for others, understand them and set a course for the next release.

Don’t Innovate

Your business may be cut-and-dried, but the effect of mobile may reach beyond transactional power.  Brand loyalty and customer acquisition costs are high in many industries.  Assigning correct value to creating improved customer experiences, reduced customer service cost and a feeling of consistent customer support may help you better understand your mobile strategy.  Looking at your app as a marketing tool and a brand extension tool rather than an engine of direct transactions could be helpful.  On the other hand, maybe you are about driving transactions at this moment at the customer location.

There is no question that mobile is a bit different animal than your current business.  You have an opportunity to be a leader and ride the mobile buzz.  Contact me for more information on I can help your mobile strategy succeed.  You can reach me at matt at deepfocustech.com.

Posted in Thoughts.

Tagged with , , .


Expedia application live in the app store

Deep Focus Technologies’ latest development efforts have been released in the app store.  The Expedia Itinerary Viewer application provides access to Expedia.com itineraries while you are traveling.

Download the Expedia Itinerary Viewer application
Customer comments on this application’s development

trip-list trip-home air hotel
Find iPhone apps at AppStoreHQ

Posted in News, Products.


Just Released – Theater Tool 1.0 for iPhone

icon21Now, you can use your iPhone to help you adjust your home theater.  Theater Tool offers audio analysis tools to support balancing speaker levels and a delay calculator to assist in setting the appropriate delay between front and rear speakers.

More information on the product page.

Get Theater Tool on iTunes.

Posted in Products.


Making a couple of great products work together

Update: updated package, md5 and install path the readme and this post.  Correct install path is ~/Library/Scripts/Applications/Camino.  Thanks David for the correction and including the script on Pimp My Camino.

***

Even with the recent release of Safari 4 beta, I’m hooked on Camino as my browser.  It is quick and lightweight.

I’ve also recently started to use Evernote, both on my Mac as well as my iPhone.  These are great products, but the only way to enable web clippings from Camino to Evernote in the browser is by going through a bookmark that contains a javascript URL that does the clipping.

Jealous of the Firefox community and their plugin, I wanted an Evernote button on my toolbar to do the clipping, so I built a simple applescript to accomplish the task.  If you’d like to try it out, you can download it here. (md5sum:f7738b0ec8716c2b6979f68edc98e910)

Install by unzipping the package and drop it in your ~/Library/Scripts/Applications/Camino directory (~ is a shortcut for /users/username).

Next, customize your Camino toolbar.  You’ll see Script:Evernote in the toolbox.  Drag it up to your toolbar and you’re good to go.

Because the script communicates with Evernote via applescript, you’ll need to have Evernote on the local machine.  If you’re reading this far, you probably already do.

Happy clipping!

Posted in Uncategorized.


pinch media presentation on iPhone AppStore analytics

Required viewing if you’re considering an iPhone application.
View more presentations from pinchmedia. (tags: pinch media)

Posted in Uncategorized.


If you don’t care about the customer, why bother?

I’ve been agonizing over the purchase of a to-do manager for the iPhone for several days.  Reading the reviews, both on the app store as well as on various review sites on the Internet didn’t bring much clarity.  It wasn’t that I was all that freaked about about buying the to-do program, I wanted to make the right choice and buy the right software for what I needed to do.

So, I went with what I knew.  The program I purchased an iPhone front-end for an online task manager that I’d been using for over a year quite succesfully.  In fact, I had purchased this company’s Blackberry front-end for this service and had been quite pleased with it.  It was updated frequently and reported bugs were fixed.  In fact, I’d traded emails with the developer surrounding some issues in the past.

The reviews on the app store weren’t great.  Some of the early reviews complained of the cost.  I dismissed these.  There were some that complained about crashes, but how bad could it really be?  These guys had been building decent software that I’d been using for a year.

The reality is that they were bad.  I’m talking extremely bad.  10 crashes in 10 minutes, at least.  It seemed to me that there was some aspect of this software, or of the scenario that I was trying to use that was misunderstood by the developer and simply went untested.  Using the software for several days convinced me otherwise.  It was as if the software wasn’t tested at all.

I emailed the company, including offering whatever help I could provide to give them information to fix the problem — I’d debug it if they gave me the source code.  No response.  I had recently posted on their message boards on the topic of their Blackberry client with no response as well.  There are scattered reports of no response across their own forum as well as a report of contact which was followed by unreturned emails.  The application, which is obviously broken is still on the app store and has not been updated since July.

It is as if this company does not realize or care that it has customers that are unsatisfied by its products.  It doesn’t have the time, energy or concern to fix the issues, nor does the company have the decency to pull the product from the app store.  It is very clear that this is a business that does not understand its place in satisfying its customers.

Despite more than a year of history, I’m walking.  I can’t trust that this company will maintain their services if they can’t even pull completely broken software off of the market.

The thing that is most interesting to me is that this company also provides software development consulting to some big-name companies and probably some not-so-big companies.  I can’t imagine what their consulting customers must go through as they try to get completed software delivered to them.

I’d like to think that their consulting business works properly and delivers good software and fixes the defects that the customer reports.  Maybe this activity gets in the way of me, the little guy, who just wants to manage the things he needs to do.  If you can’t trust them to do the right thing with a $9.99 piece of software with their name on it, can you trust them with a $9,999.99 piece of software that has your name on it?

Posted in Thoughts.


Meet the new world. Same as the old world.

Sometimes I feel like a dinosaur.  I went to school and cut my teeth in software development in an age where, to get acceptable results, you needed to understand what the computer was doing.  That meant understanding size and space tradeoffs.  It meant explicitly controlling the computer and its runtime so it did what you needed it to do, rather than what it wanted to do.

There were glorious hacks in the late 80s that were clearly innovative ideas designed to squeeze the most out of platforms.  The virtual memory linker was one.  In order to run more code than could physically fit on an x86 DOS machine, a linker was implemented that cut your app into pages that could be swapped in and out of memory and executed.  To make that technique work better, we worked with a company called MicroQuill which built an analysis tool that, after studying your program’s execution (don’t forget the hours, days, nights and weeks of instrumentation), rearranged your functions into pages where they had the highest probability of being called by another function in the same page.  Memory was small, disks were slow and we needed to squeeze every ounce of potential power out of the platform — for our customers.

The reason this all comes back to mind is because of an interesting discussion about garbage collection and memory management on an iPhone discussion group.  In today’s web world, many commercial sites are based on script languages.  Many of which are extremely powerful and fairly quick.  The ability to run on such high-level languages is a testament to the computer hardware that we all have cheap access to.  Many developers do amazing things with lightning speed on such platforms.  If your resulting app runs slow, get more hardware, or order up some additional compute resources from the cloud.  Problem solved.

An iPhone developer was lamenting the absence of the garbage collector in complex structures where the graph is difficult to follow and apparently clean up after.  The discussion was in the context of autorelease pools being inappropriate for that task.  Interestingly, the GC, while handy and making things much easier for developers, works on explicit actions.  For an object to fall out of the the reference tree and into the garbage collector, you have to explicitly do something to remove that reference.  This activity seems like exactly the moment you would want to perform memory management — to reduce the retain count (refcount for you COM dinosaurs) count on the object that you’re done with.  Just a bit of extra code to explicitly do what you want the GC to do for you.

The iPhone lacks a garbage collector, but the Android has one.  Advantage Google?  Perhaps not.  The way I tend to think about this is that Apple decided explicitly that they didn’t want GC running while a developer wanted their code to run.  The consequence of this is to either hold collectable references longer if you have a GC or make the developer explicitly do the work.  As a developer, I don’t want unused memory stuck waiting for a process that will “steal” CPU cycles from me for the purpose of discovering stuff that my code explicitly said that I’m done with.  Why walk an allocation tree when you don’t have to?

On the other hand, if I was designing a platform to be easy to develop for, or one where additional compute resources were available simply by scaling horizontally, I’d make developing code the easiest and fastest process possible.  The thing that is interesting to me is that it seems that it is easier for a “dinosaur” who is used to doing things themselves and has a relatively deep understanding of what’s going on at the lowest levels to adjust to a less-constrained development world.

While I’m not sure that this is the case for the people I’m discussing this with, people who see horizontal scaling and cloud compute power as a resource only limited by cash, perhaps ponied up by an investor, have a more difficult time adjusting to doing things themselves, and truly understanding the cost and implication of their decisions.   It is a tough realization when you find that buying a second iPhone doesn’t make the app running on the first one any faster.

Posted in Thoughts.


Is the honeymoon over?

My father-in-law used to ask me this relentlessly after my wife and I had just gotten married.  There was a specific definition he had in mind.

I’m asking that question about the iPhone.  Like a progressing marriage, I’m finding the quirks and limitations of the platform.  Some of those limitations are now obvious in the implementations of some of the system applications.  That’s not to say the applications aren’t great, it is just clear that the developers of those applications hit some of the walls that I hit and worked around them.

The point is that they need not be deal-killers.  Just like any software platform, there are bugs and limitations.  The truly talented people are the ones who sees the platform for what it is and what it can deliver, rather than what it can’t do out of the box.

In the days of Windows CE, I did quite a bit of support work with the developer comunity on the newsgroups (does anyone run news servers anymore?).  You could see difference between people who were looking to solve the bigger problem and the people who were looking to have their problems solved.

That is the line between the casual and the committed.

The honeymoon might be over, or it might not.  I’m facing some big challenges and spending some serious time on the gameulation (yes, I made that up) product that I’m working on with another company, so much so, that I’m delaying releasing my completed app — I just haven’t been able to bring myself to make a trip to RadioShack for some testing equipment.  I’ve got too many challenges in my current project to make the time during my daily (and nightly) focused development time.

The great news is, however, despite the challenges, the app I’m building is looking pretty good.  Going from a kernel of an idea of how I’d do the things I’m doing to the realization of the first stage of that mental design on a platform, language and framework I’d used to develop one small app has been a great challenge and liberating mental exercise.

Posted in Uncategorized.