Archive for the 'tech' Category


Simplifying the User Experience for Your Initial Launch 2

I’ve recently been giving advice to some pre-launch startups about their user interface and initial set of features.  After re-reading one of the emails I sent, it seemed to me that the concepts are pretty universal and maybe apply to your project.

  • Less Is More. If you can remove features from the service in the near term, it is beneficial for everyone.  Your developers will have less work, your users will have less learning curve, and you’ll more clearly be able to interpret early usage data.  If you’re not familiar with the term Minimum Viable Product, google it, might be helpful.
  • Use Sensible Defaults. Whenever possible, pick something for the user, and only allow them to change it if they need to.
  • Stub Future Features. To get better ‘interest’ data on specific future features, you can create links/buttons to non-existent features.  ie:  ’Click Here to Change the Answer Duration’ –> This feature is not yet implemented, but we want to see how many people would be interested in using it.  Would this feature be useful to you [Yes] [No] Leave us additional comments…  You can count clicks and get very direct comments about each prospective new feature.

Don’t Call My Baby Ugly – Actually, Do 1

Entrepreneurs form peer groups which provide a trusted circle of support and constructive criticism for each other. Often, this peer group is used as a sounding board for new ideas – sometimes bad ideas.

The protocol for providing critical, constructive criticism is an oft-overlooked aspect of being an active and valuable participant in entrepreneurial networks and is a delicate topic I want to tackle head-on in this post.

Sometimes telling your entrepreneurial colleague that their ‘baby is ugly’ is the best thing you can do for them. Time is the most valuable resource we possess and helping entrepreneurs figure out where best to spend their time is critical. When bad ideas come to light, honest, thoughtful criticism, delivered clearly and respectfully can be invaluable.

Delivering criticism is always a delicate art. These issues can make it even more difficult:

  • If the entreprenuer has already committed time and/or money to the project
  • If it is a labor of love, created from a some emotional personal experience
  • If it is a close friend – or worse – family member
  • If you are successful and they are not
  • If they are successful and you are not (’success’ is of course relative)
  • If your assessment turns out to be wrong

Be conscious of these issues, but when you’re asked, delivering your opinion is not just a favor, it’s the right thing to do. Here are my suggestions for handling the situation:

  • Confirm they actually want feedback. Sometimes people are just floating ideas by and don’t really want feedback. Make sure you understand the inquiry and they really are asking for your feedback.
  • Follow the basic rules of critical feedback:
    • Say something nice
    • Deliver the bad news
    • End on a high note
  • Explain Your Position. Thoughtful feedback is 1000 times more useful than flat, terse criticism. If the idea is entering an already hyper-competitive market and has no competitive advantage, then ask questions to help illustrate the scale and complexity of the competitive landscape.
  • Share Your Perspective. If you are a successful entrepreneur, there are probably more than a few critical attributes which you look for in new opportunities. Share them and discuss how they may be missing from the idea at hand.
  • Suggest Next Steps. Great businesses rarely become successful in the same form they start out in. Sometimes an OK idea can lead to other more interesting opportunities, which can lead to a great insight, which can lead to the next YouTube, Google, or NetFlix. However, sometimes ideas are just bad. If you’re sure that the direction is wrong, be honest: ‘I think you should look for something else’
  • You Don’t Know What You Don’t Know. If I was asked to provide feedback on a new company for an innovative automobile engine, I’d have to recuse myself from providing much feedback. I drive a car, I know there are lot’s of cars sold, but short of high level ‘market’ stuff – I’d be out of my league. Let people know when you don’t know what about the domain or market being discussed.

There is a time and a place for white-washed, head-nodding agreement, and avoiding conflict. Unfortunately, the circle of trust formed by entrepreneurial peer groups is not one of them. As a fellow entrepreneur, you have a responsibility to provide honest feedback, help educate other entrepreneurs and ensure that the Founder Class creates value and innovation and doesn’t waste time on poorly conceived ideas.

US Government unable to get the 2010 Census online, who wants to team up for a weekend and show them how to do it? 5

It seems outrageous to me that the Federal government could not find the technical know-how, time, or dollars to invest in allowing US Citizens to complete the 2010 Census online. Such efforts would have saved on printing, postage, cut down on paper, saved fuel for distribution, provided instantaneous results, been easier for many citizens to complete, and increased the completion rate significantly.

For a single-person household, the form consists of 10 questions. YES, 10 checkbox and fill-in-the-block questions. There are 7 additional questions for each person in the household.

While building such a form now would be pointless in terms of e-enabling the 2010 census, I suspect it might create a news event to shed light on how the US government is failing to leverage technology to automate systems in concert with available technologies.

Such a point is especially germane as we look toward an increasingly federalized healthcare system, and an IRS in need of significant reform.

Consider this an open invitation to join up with a few good web developers to put the form online one saturday – just to prove a point.

T-Mobile vs AT&T – iPhone Service Quality Santa Monica 3

For the first 18 months I’ve owned an iPhone, I’ve been able to see past the shortcomings of the service, but I’ve had a change of heart towards the lacking service.  Changing expectations, history with a more reliable provider/phone, and a few specific incidents where service quality (dropped calls, missed calls) has had an acute, detrimental impact on my work or personal life.

Now that I’ve made the mental leap to make a change, it’s time to evaluate the options:

  1. Get AT&T to fix the service
  2. Jailbreak the phone and swicth to T-Mobile (the only other GSM provider in the states)
  3. Buy a Palm Pre, Android, or HTC phone

After a stop at the local AT&T store, the manager helpfully submitted an on premise service request – apparently they will actually check my home address and make make adjustments to the tower.  She literally said they might ‘turn the antenna’.  Needless to say, I’m not optimistic that will resolve the issue.  She also confirmed that the Santa Monica area does suffer from ‘capacity problems’, and that AT&T is in the process of adding capacity in the area.  Promising, but who knows how long that will take.

Next up, I acquired a first generation iPhone to test a jailbreak and a T-Mobile SIM.  Fortunately, the phone was already jailbroken, so after a few updates, I dropped in a T-Mobile SIM, and the phone was running.

The ability to compare an AT&T iPhone and a T-Mobile iPhone side-by-side was eye opening.  I’ve heard lot’s of speculation that the iPhone was at fault for service problems – different provisioning of towers for iPhone users, a weaker radio, lot sof reasons, but nothing I could confirm.

This test was in no way scientific, but here’s what I observed:

  • Visible difference in the number of bars on the phones.  In most areas of my Santa Monica residence, the T-Mobile phone show more bars.
  • Several areas where there is no reception for AT&T, but a few bars for T-Mobile.

I made several test calls – simultaneously calling both phones via Skype – as a conference call.  In 4/6 tests, both phones rang. In 2/6 tests, the AT&T phone never rang and the calls went straight to voicemail.

Disappointing results by AT&T to be sure.  At this point, I plan to give AT&T a few days to attempt to resolve the issues, then on to figure out which direction to take.

TV: Apples’ Next Conquest – It’s the Buttons Stupid 5

Steve Jobs has completed the third chapter of what I see as a 4-part story to take over entertainment.

In chapter 1, he built a little film company called Pixar that helped a bigger company Disney stay relevant during an otherwise tough time for the mouse.  Since Pixar’s films represented the lion’s share of revenue during their relationship, and Disney never developed any of their own digital skills, they picked up Pixar – along the way making Steve Jobs the single largest shareholder of Disney stock.

In chapter 2, while music industry exec played ivory tower games and attempted to turn off the internet with attorneys and fruitless DRM efforts, Steve took the novel approach of vertically integrating music distribution with the personal computer and a line of devices that turned digital music into mobile assets that you could pack in your pocket. These efforts have put Apple on a path that today controls over 70% of digital music sales and could account for 28% of all music sales in 5 years.

In chapter 3, Steve decided that he could apply his smarts to the telecommunications industry, in one fell swoop, creating more innovation with the iPhone than the industry had seen since the creation of the mobile phone itself – fundamentally changing the way people interact with their phones.

Obviously much more can be written about each of these chapters, as well as the previous period which led to this series of breakthroughs, however the point of this post is a prediction about what I believe will be the next major chapter in the Apple Story:

CHAPTER 4: Re-inventing Television

Image: Dan Wiersma

Image: Dan Wiersema (http://www.danwiersema.com/)

Like music distribution and the mobile phone, the television industry finds itself in a transitional period.  The industry has been devoid of significant innovation since the advent of color.  HD, cable, satellite, DVRs, and now Internet TV are fairly obvious, incremental improvements, but even these improvements lfailt to deliver a fulfilling user experience.  It’s the same vacuum that was felt by the music industry, and the mobile phone user before Apple delivered their solution.  It’s a huge market to boot, and Apple now knows everything it needs know to enter in a meaningful way.

Here are some of the factors that frame this prediction:

  • Apple has significant investments in flatscreen manufacturing with Samsung and LG
  • the current Apple TV box is a test, to learn things about the market and user experience
  • The experience of flattening hardware ala MacBook Air enables Apple to fit lots of gear in the back of an LCD case
  • A line of high quality, flatscreen TVs with wifi + storage + an elegant remote + great media browsing UI would be a leap ahead for the TV marketplace (my Motorola DVR remote control has more buttons than my computer keyboard – count ‘em) – clearly an area where some iPhone like UI magic could assist

I’d suggest that Apple’s entry into the convention TV marketplace is inevitable – guessing when is a much harder task. Analyst Piper Jaffray suggests it will be in 2011, but I think we might hear something as soon as at the June 2009 Developer Conference.

There are many more reasons why this is a great next step for Apple – share your thoughts in the comments.

Solid State Drive Pricing Getting Competitive 31

The marketplace for SSDs is getting more and more competitive. Intel just slashed prices on many of their drives, and all the other manufacturers are doing the same on a regular basis. Capacities are going up, prices are coming down, and performance is getting better - especially with the advent of the new PCIe based cards which lap SATA II.

You need to upgrade your Flash Player

Chatting with the LAWEBDEV Community 1

I was fortunate enough to grab a speaking spot at yesterday’s LA Web Developer meetup in Glendale.  I gave a quick presentation on some of the lessons learned during the fundraising process with Koders, some of the interesting dynamics for new startup opportunities, and ended with some ideas on things the LA community can do to position itself for the next big tech upswing and re-opening of the IPO market.  
You can check out the deck here – sans all the pithy commentary:
LA Tech Startups Call To Action
View more presentations from dlrush.

Virtual Office Work With Meetsee 1

Remote working has become more and more prevalent in today’s corporate world.  With an eye on saving money on travel, energy, and other personnel related expenses companies are starting to look for software solutions that cut costs and increase productivity. Some friends of mine in Atlanta have come up with an application that seeks to address the problem of many remote apps not being immersive enough, or not having enough personality. Their company, called Meetsee, is a 2.5D virtual office built using Flash.  According to their site, Meetsee is:

“Your personal virtual office is a space online filled with rich
ways to communicate, share content, collaborate on documents,
and build rapport between remote co-workers.”

I signed up for my free virtual office on their Web site. You can choose between four different office templates that come bundled with a set of furniture and tools that you can use. Navigating my office was easy enough by just clicking on objects such as chairs, filing cabinets, and TVs to interact with them.

My Meetsee Office

My Meetsee Office

The goal of any virtual office or meeting space is to facilitate communication between remote parties as easily as possible, and to make sharing information feel natural.  Having recognizable objects with familiar functionality is a strong point of Meetsee’s application. They rely on common metaphors in their environment, for example, the TV plays videos. 

To that effect, my room came with a whiteboard, an entertainment system for playing YouTube videos, a filing cabinet to share files, a clock, and a corkboard where people can leave photos, messages, or weird little animated stickers. I was also able to add new stuff to the room, like a news ticker style RSS viewer and a Twitter display. You can even open the tools in a bigger window.

My Meetsee Office Preview

My Meetsee Office Preview

Meetsee gives the room owner a lot of control over how their office or meeting space is used.  You can choose various permission levels that change what other users are or are not allowed to do, and you can even track room activity from a report on the site.

You can add your virtual office to your Web site or even your Facebook profile. If you want to check out my office you can jump in as a guest:

The (currently free) upgrade to a Meetsee Plus account gave me access to new tools including audio conferencing, a presentation viewer, web cams and new virtual meeting rooms. These tools provide all the basics to conduct successful business meetings and have integration with all the standards you’d expect: YouTube, Flickr, PowerPoint, RSS, and Twitter. 

My Meeting Room

My Meeting Room

For a virtual office, I could see many uses for my Meetsee room. The web cam would definitely be nice to have for meeting “face to face” with my remote team members.  The ability for my remote collborators to share virtual space together has the potential to really change the way we work.

Since Meetsee is currently in public Beta, all upgrades are free.  This means you can jump in and check out their more advanced features, like web cam and user networks.  There are many options for remote work and granted there are some that would prefer the colder, simpler style of doing things, however if adding personality to the experience is for your team, then I highly recommend checking out Meetsee.

You can start out by signing up at Meetsee.com or by adding their Facebook App.

Freedomspeaks Widget and API Makes Getting Involved Even Easier Comments Off

Many people are cynical about their impact on the political process.

Does my vote really count? Do my representatives care what I think?

One innovative website is focused on helping answer these questions while making it easier for every citizen to get involved in the democratic process is Freedom Speaks.  This week, Freedom Speaks launched a new set of APIs and widgets to help make it easier to create new democracy-focused applications.

To understand the power of their platform in action, let’s see if you can answer this simple question:

Who are your political representatives in federal and state government?

If you move to a new home, aren’t really active in politics, or don’t want to visit 3-4 government websites to lookup this information, then Freedom Speaks is for you.

Of course, all of this information is available online, but it takes at least 2 searches to find your federal congressional reps, and every state has a different way of finding those state representatives.  Too much work, and yet another reason to stay complacent in the political process.

Try out their new widget, so you can be informed at your next dinner-table debate:

Developers should checkout the API Information here.

Caching and compression for Apache and mod_rails Comments Off

Optimizing your web server configuration is an important step for any production web application. Compression and caching are two complementary techniques that can greatly improve the performance of your site. We won’t go into a lot of detail on the rationale for these changes.  Most of that is covered in profuse detail by that Yahoo Performance Team who produce the excellent YSlow! plugin for Firefox.

The code in this post is used for a soon-to-be production Ruby on Rails application using this stack:

Reliable, Performant Pre-Compression

Compressing text files in your application can lower bandwidth usage by a factor of 10 and decrease the amount of time to retrieve a web resource by the same amount.  In Apache, mod_deflate is the easiest way to enable compression. Mod_deflate will compress content on each request – for dynamic content, this is expected, however for infrequently changing static content such as CSS or Javascript files, this is redundant and can increase CPU load significantly.  To get a little more control over this, we choose to pre-compress static files on our site and serve them when appropriate to compatible browsers.

In the configuration below, we use apache mod_rewrite to handle this outside of our application:

IF Request is CSS or Javascript AND
  the browser can handle gzip compression, AND 
  the browser is not Safari AND 
  there is a file with the same name with an additional .GZ extension
THEN 
  Serve this compressed file instead of the original request

Evidently, some versions of Safari can get tripped up by this particular use of compression, so we leave them out of the fun for now.  It would be great to re-enable this if we can verify it is no longer an issue or has been resolved in the latest version of Safari.  TODO: Verify this assumption.

To handle pre-compressing files, there are a variety of approaches.  For the current Rails application I’m working on, we’ve integrated AssetPackager –  which can optimize, combine and compress these files as part of a build or deployment process.  It’s an excellent addition to the toolbox.

The section below enhances the configuration suggested by The If Works folks.


# USE PRE-COMPRESSED GZ FILES IF THEY EXIST - WE DON"T WANT TO COMPRESS ON EVERY REQUEST
RewriteCond %{REQUEST_FILENAME} \.(js|css)$
RewriteCond %{HTTP:Accept-encoding} gzip
RewriteCond %{HTTP_USER_AGENT} !Safari
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME}.gz -f
RewriteRule ^(.*)$ $1.gz [QSA,L]
<div>

Practical Caching Strategy

The next important step to enable is a reasonable caching strategy for our site.  Caching is critical to your web application for several reasons:

  • Users can navigate your site with less requests, improving perceived responsiveness
  • It enables the use of a high-performance acceleration or CDN layer
For high-volume web sites, proper attention to caching rules and application design should enable you to achieve caching rates in the 75-90% range.  Some sites have more dynamic content than others of course, but every site has a variety of images, static CSS and Javascript files which can benefit from a caching strategy.
In our current configuration, we want to identify a set of file extensions that are cacheable, and let proxies or browsers cache them for up to 1 week.  It is easy to expand this configuration to set different amounts of times for different file types.

<FilesMatch "\.(ico|pdf|flv|jpg|jpeg|png|gif|swf|mp3|mp4|js|css|gz)$">
Header set Cache-Control "max-age=604800, public"
ExpiresDefault A604800
Header unset Last-Modified
Header unset Pragma
FileETag None
Header unset ETag
</FilesMatch>

A couple important points about this configuration:

  1. We disable etags for these types, since it can be unreliable in clustered applications
  2. We leverage both Expires and Cache-Control since different browsers may rely on either one to be the definitive rule (Cache-Control is the new standard)

Deploying new JS or CSS files in our app could cause problems.  In our case, because we are leveraging AssetPackager, we get unique keyed filenames for these resources which change each time there are updates.

For example, AssetPackager merges 3 Javascript files into a single resource called base_timestamp.js where timestamp will get updated if any of the source files are updated.  This allows us to avoid any stale cache issues we might encounter after site updates.  You can see that if you change the content of one of these cached file types without also changing the name, some users will continue to reference the older files until their local cache expires.  An alternative remedy for frequently updated files is to set the cache timeout to a much lower value – 4 hours or 1 day, so that stale files won’t live as long.

While this is certainly not the end-all-be-all of configurations for applications, it is working well for us. The Charles Proxy was very helpful in verifying that the configuration we have is fully working as intended.

Have more best practices that we should incorporate into this configuration?  I’d love to hear them.  We will update this config with improvements as we find them.

Complete Config:


<VirtualHost *:80>
# BASIC SERVER CONFIG
ServerName www.yourserver.com
ServerAlias yourserver.com
DocumentRoot /srv/www/myapp/public
ServerAdmin your@email-address.com
ErrorLog /var/log/httpd/yourserver.com/apache_error_log
CustomLog /var/log/httpd/yourserver.com/apache_access_log combined

# ENSURE WE ARE IN PRODUCTION MODE
RailsEnv production

RewriteEngine On
AddEncoding gzip .gz

# IF YOU NEED TO DEBUG REWRITES
#RewriteLog "/tmp/rewrite.log"
#RewriteLogLevel 9

# USE PRE-COMPRESSED GZ FILES IF THEY EXIST - WE DON"T WANT TO COMPRESS ON EVERY REQUEST
RewriteCond %{REQUEST_FILENAME} \.(js|css)$
RewriteCond %{HTTP:Accept-encoding} gzip
RewriteCond %{HTTP_USER_AGENT} !Safari
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME}.gz -f
RewriteRule ^(.*)$ $1.gz [QSA,L]

# MAKE SURE THE BROWSER UNDERSTANDS WHAT TYPE OF DATA IT IS RECEIVING
<FilesMatch .*\.js.gz$>
ForceType text/javascript
Header set Content-Encoding: gzip
</FilesMatch>

<FilesMatch .*\.css.gz$>
ForceType text/css
Header set Content-Encoding: gzip
</FilesMatch>

#CACHE FOR A ONE WEEK
<FilesMatch "\.(ico|pdf|flv|jpg|jpeg|png|gif|swf|mp3|mp4|js|css|gz)$">
Header set Cache-Control "max-age=604800, public"
ExpiresDefault A604800
Header unset Last-Modified
Header unset Pragma
FileETag None
Header unset ETag
</FilesMatch>

</VirtualHost>

Next Page »