Ship Software OnTime!

The blog that helps you build great software

5 Common-Sense Practices Dev Teams Should AVOID

Posted by Hamid Shojaee on May 6, 2008

There are a number of common-sense software development practices that can actually hurt your chances of success.

Here are 5 common-sense items you might want to avoid:

1) Treat Team Members the Same

It’s common practice and it makes sense. It’s fair, right? Treat everyone the same. What could be wrong with that?

The origins of the “fairness” practice may come from early childhood when kids discover crying “no fair!” is a great tactic for getting what they want, or maybe it has something to do with the golden rule of “treating thy neighbor as thyself.”

But in practice, we usually do treat our neighbors differently. Some neighbors we hang out with, invite to our houses and party with into the wii hours of the night. Other neighbors we avoid like the plague. So why do we force ourselves to treat all team members the same?

Some team members contribute immensely to the success of the project; they are self motivated, get their work done on-time and get along with everyone. Others, we can hardly count on, they consistently miss self-projected deadlines, they are sick a lot (in the Bahamas) and frequently complain about others.

Why should these two personalities be treated or rewarded similarly? Doing so only reinforces the negative behavior and increases the risk of losing the preferred team member. You have limited resources, both in time and reward-money. If you spread them equally among the team, it’s a disservice to your organization.

You can count on your best team members recognizing that and not tolerating it for long.

2) Follow Established Procedures or Processes

Procedures and processes are there for a reason: to avoid mistakes and to identify the people who make mistakes. Following the rules only makes sense. Avoiding mistakes is a good thing.

Well it might be a good thing, until your best team members start to feel as though their hands are tied behind their backs and if it wasn’t for some stupid process, they would be able to get a task done in 1/10th the time.

Avoiding mistakes is a good thing, but at what cost? Software engineers are essentially problem solvers. That’s what they do all day. The best of them enjoy and derive fulfillment from solving problems with the least amount of effort (both personal effort and computing resources). They are by nature very intelligent people. Every developer on the team probably possesses well-above-average intelligence. They will find ways to solve problems, but if they are bound by some arbitrary rules that prohibit them from deviating from standard procedures and processes, their productivity (and creativity) is limited.

This isn’t to say teams should avoid processes all together. But as a team, there are two ways to view processes: one is to view them as the laws of the land which should be followed at all times and the other is to view them as a set of recommended guidelines that seem to work well, but feel free to deviate as you see fit. The latter is far more productive for intelligent people.

To invoke another biblical adage: The process is created for the team, not the team for the process.

3) Create a Detailed Design Before Starting Development

Seems like a great idea. A detailed design is like a step-by-step instruction list on how to get the job done. Having a detailed design makes the programmer’s job much easier. Nearly brainless. If X is the input, Y is the output. Don’t think about whether or not it makes sense. Just do it.

With detailed designs, you nearly guarantee an increase in productivity and you nearly guarantee a result that’s mediocre at best. Without the ability to refine and adapt a solution as the work is being performed, you eliminate hundreds of branches of potential evolution, which could have made the result that much better.

But having evolutionary branches of a potentially better solution scares a lot of project managers. What if the branches are never-ending and the solutions never get done? That’s a real possibility if the project manager doesn’t do his job well, because a huge part of that job is to help guide the evolution to an outstanding result.

Plus the up-front savings of avoiding a detailed design and opting instead for rough design guidelines will often produce better solutions in less time.

4) Make it Difficult to Change Requirements Mid-way

Project managers are all about delivering their projects on-time and on-budget. The number one risk-factor for delivering a project on-time is a change of requirements.

And, that’s why we have change committees involving numerous people from different departments whose job it is to approve any changes to the established project scope. They analyze the impacts of a change on the project schedule and the budget, often inflating both to increase the likelihood of rejection or at least provide some padding in case the change is approved.

The results are predictable. Changes are nearly always killed by the change committee. Who in their right mind would approve a change that increases the cost of the project and delays the delivery date?

Here’s the big problem with killing nearly all changes: some change is good and by making changes difficult in general, too many changes are killed. It’s a chemotherapy approach of dealing with change…kill nearly everything and hope that the few surviving cells happen to be the ones you wanted to keep in the first place.

That’s definitely one way to do it. But, development teams that employ a democratically-run change committee (1 person, 1 vote) will never create outstanding products. Ideally, changes should be reviewed by teams of 3-4 people, with 1 person having the ultimate say, after considering the input of the committee.

5) Assign Tasks Based on Resource Availability

Gantt charts are a project manager’s best friend as they allow the project manager to view the entirety of the project in a visual representation with dependencies and they can even provide resource assignments. But one of the drawbacks of the Gantt chart (such as Microsoft Project) is that project managers are encouraged to simply assign tasks based on resource optimization and leveling features.

The problem with this should be obvious: important tasks are often randomly assigned to team members based on their availability rather than their skill sets. This is a huge mistake!

Another one of the project manager’s major roles is determining the strengths and weaknesses of each team member and assigning tasks based on this information. Assigning critical or show-stopper tasks to a weak team member is a recipe for disaster. Likewise, assigning trivial tasks to your most talented team members is a waste of your best resources (not to mention a risk of decreasing job satisfaction for those team members).

No Gantt chart is going to identify this information for you. That’s your value-add to the team.

Hopefully by avoiding these common(-sense) mistakes, you can improve your development success. Remember, a lot of the above hinges on the quality of your team, which I wrote about previously. I’d love to hear your thoughts on the above suggestions. Leave a comment if you agree or disagree with some reasons or examples why.

Posted in Development, Team | Tagged: , , | No Comments »

iPhone Desktop: Unleash the Leopard in Your Pocket. $299.

Posted by Hamid Shojaee on April 3, 2008

Disruptive technologies are those technologies that brew up independently under the radar until all of a sudden they take over well established mainstream industries.

And, here’s my take on the biggest disruptive technology currently sitting under our noses, err…in our pockets: The Apple iPhone, and it’s potential to replace the traditional desktop / laptop computer. Imagine this:

What is the iPhone Desktop?

iPhone Desktop Specs The iPhone Desktop is essentially a dock / workstation for the iPhone. Pop your iPhone into the side-loading slot, and your iPhone goes into Desktop mode. The workstation becomes YOUR computer, whether you are using one at home, the office, or casually borrowing one at Starbucks, the library, or the airport.

Wherever you are, it’s YOUR computer.

At home and at the office, you can take advantage of USB storage, syncing only the essentials to your physical iPhone unit. For improved security, you may wish to keep some files on your .Mac account’s virtual storage and only walk around with music, pictures and videos in your pocket.

Incoming Call? No Problem!

So what happens when you are docked and receive a call? Just like the iPhone, the call takes over your screen and gives you the option to answer the call. However, advances will be made, and you will be able to optionally accept eligible calls (i.e. calls placed from other iPhones, iChat, or something similar) with video enabled. iPhone Desktop’s built-in iSight camera and microphone will be used to facilitate the phone call, in lieu of a USB or Bluetook headset.

Just in case it’s not perfectly clear, let me state this in the simplest terms possible:

The iPhone is not a phone, it’s a PC (or, it’s a Mac, if you prefer).

This is precisely what makes the iPhone a disruptive technology. It’s got OS X under the hood, and there’s no reason to believe Apple has fully exploited this tremendous advantage it has over other phones and portable devices.

Unlike its Windows Mobile counterparts, Apple builds the software AND the hardware, which means it is orders of magnitude more nimble when it comes to integrating the two into a solid device that can deliver unbeatable user-experience. When Apple wants to add a feature, whether to the hardware or software — they can just do it. They don’t have to wait for the next release of the software, or for hardware partners to come on board. They can just do it.

iPhone Desktop Pricing

The “Complete PC” part is what I want to emphasize, but let’s not leave out the fact that it includes a phone and an iPod media center, too. It lives in your pocket, and when it makes sense, it takes on the form of a desktop PC. Just add a bluetooth keyboard and mouse, and you’re still under $850 for a beautifully sleak, ultra portable computing experience.

But the real beauty of this (for Apple) is that the PC industry will continue to ignore the iPhone…until it’s too late. And, as an added bonus (for Apple), cell phone competitors will continue to treat the iPhone as just another phone…until it’s too late.

Apple’s 30+ years of hardware and software integration puts them eons ahead of their competitors in both industries. For years, Apple was derided for not opening up its platform to cloning. To many, their strategy was considered closed, limiting, and seemed short-sighted. Yet, now their persistence and accumulated hardware / software experience is obviously their greatest advantage.

The iPhone combined with the iPhone Desktop Dock represents a truly “Personal” Computer with capabilities sufficient for more than half of PC users today. Complete with web-browsing, email, casual games, YouTube and iTunes! The average PC user doesn’t need much else — remember “web-browsing” today means Google Apps and CRM, too.

With iPhone Desktop’s ability to connect external USB-based hard-drives, storage expandability is a non-issue, and, at just $698 for a complete system, it’s one of the world’s least expensive, most portable, well-equipped PCs.

Nothing else would even come close, actually.

Before you dismiss this by saying, the iPhone isn’t powerful enough to substitute for a PC, consider Apple’s tremendous leaps toward miniaturization: the iPod Nano and the MacBook Air. Do you honestly doubt they will be incapable of shrinking a Mac down to the size of an iPhone?

So What Does All of this Mean?

  1. Taking into account the doubling of CPU processing power approximately every 18 months, and the doubling of affordable flash storage approximately every 10 months, an iPhone 3 years from now will be about as fast as a MacBook Air, and it will come with nearly 200 Gigabytes of storage.
  2. If you’re a player in the computer industry (say, you make bug tracking software like my company Axosoft), you’d better take notice! Even if I’m wrong about all of the above, and I don’t believe I am, change is coming. Today’s Desktop PCs’ and laptops’ days are numbered. People (your customers) will want their computers and the Internet with them all of the time, and even lugging around a 3lb MacBook Air will be considered cumbersome.
  3. Microsoft’s Silverlight engineers had better pay close attention to Mac OS compatibility, especially on the iPhone. A number of ISVs and IT departments will rely on Silverlight to help keep their software relevant.
  4. In addition to the iPhone Desktop (or whatever they end up calling it), Apple will produce a more portable docking station alla today’s laptops. So, you can you choose to carry your docking station with you. It’ll be a 1- to 2-lb slim device, perhaps a clamshell design, that you can also slide your iPhone into. You’ll want to take with you when you write that Great American Novel, beach side or at the park.
  5. Within 3 years the debate will begin: should iPhone sales be counted as Mac computer sales? Within 5 years they will, and Apple will be number 1 in computer sales with nearly a 50% market share. As a corollary to that statement, Mac OS X (or Mac OS 11?) will be the number 1 operating system, in terms of new units sold.
  6. Apple will create a more robust .Mac service, allowing group accounts (whether personal or business) to take advantage of iPhone collaboration features and group syncing. Also, expect to be able to operate any full Mac computer you have at home or the office with “Back to My Mac” and grab any files you need using your iPhone or iPhone Desktop. Other remote desktop options will give you access to the Windows and Linux worlds, as well. At $99 per year per iPhone, .Mac will generate significant revenues for Apple.
  7. The next generation of iPhones will usher in the era of video conference calls. Voice calls will not go away, and will likely remain the most popular form of phone conversation. A “Conference Call” etiquette will emerge, including the expectation of conference calls occurring mostly by appointment and impromptu calls defaulting to voice. What teenagers will do with this feature…let’s not go there, but parents beware.
  8. Unless Apple plays its cards totally above board and learns how to build close relationships with partners, it will build a close relationship with the Department of Justice’s antitrust group within 10 years. If this happens, the distraction could be a prelude to the next disruptive technology, which will eventually replace the iPhone.
  9. iPhone security will become a notable segment of the IT security industry. More work will be done toward remotely disabling lost or stolen iPhones, GPS tracking will be added, and the current iPhone slider will be replaced with a fingerprint scanner. In 5 years, leaving your iPhone in a Taxi Cab will suck even more than it does today, because the device will be a more integral part of your life — but you’ll be able to recover from the loss easier and with less fear of data and/or identity theft.
  10. The hospitality industry will recognize customers’ demands, and provide docking stations in restaurants, coffee shops, hotels, and wherever else it makes sense.
  11. Laptops and Desktop PCs won’t go away for a long time, but their market share will shrink dramatically. Games, 3-D rendering, faster compilers, and beefier servers will continue to push the hardware limits and processing power of CPUs and video cards. Niche markets.
  12. John C. Dvorak will be proved wrong yet again.

For More on the iPhone Desktop…

Angelo Coppola (Axosoft’s Marketing Director) spent a day participating in this thought experiment with me, and he published a behind the scenes article in his blog at Axosoft’s community site. The article (along with the image of the iPhone Desktop’s many Photoshop layers scattered all over the place) is worth a look.

Posted in Business | Tagged: , , , | 12 Comments »

Seagate Suddenly Realizes it’s in Storage Business

Posted by Hamid Shojaee on March 24, 2008

A few months ago, I made fun of Seagate for not knowing the business they are in. Today, it looks like Seagate has woken up and realized they are about to lose their shirts to the SSD (Solid State Drive) manufacturers. Surprise! They apparently had forgotten that they are in the storage business, not the hard drive business. While Seagate makes perhaps the best hard drives in the world, nobody gives a damn about hard drives. People care about storage.

Seagate’s response to the emerging SSD market is in the form of lawsuits. It’s a desperate attempt to try and stop the SSD manufacturers. It’s pathetic actually. Seagate’s CEO goes as far as to actually dismiss SSDs as a realistic alternative to disk-based HDs. If he truly believed that, he wouldn’t be throwing around law suit threats. But even funnier is that instead of responding to the threat by quickly reorganizing the company and becoming competitive in the SSD market, his response is to slam the other technology. Yeh, that’ll work! That’s why we all ride horse and buggies to work.

Bye bye Seagate! It was nice knowing you while it lasted. You have about 5 years of life left before you become a niche player.

Posted in Business | Tagged: | No Comments »

Putting it All Together: PureChat

Posted by Hamid Shojaee on February 4, 2008

PureChat Operator ConsoleFor those who love to build stuff, there’s no better feeling than introducing a new product into the world.

On Friday, Axosoft released a new commercial application: PureChat V1.0. PureChat is a simple web-based application that allows an ASP.NET web site operator and a visitor to chat with each other. Since this blog is about shipping software, I thought it might be interesting to talk about how this product came to be.

As Jonas explains in his blog post about PureChat, the project was born from a side-project that he worked on after the last major release of OnTime. In What’s the Developer’s Incentive to Ship, I explain how having side projects at Axosoft is an extremely motivating tool for all of us. It gives everybody a chance to breathe and learn new things. But more importantly, it’s a great way to actually keep everyone focused on shipping our main product. Once OnTime 2008 was out the door, the side projects (could get) started.

This time around, each developer decided to work independently on different projects. As I said, what came to be known as PureChat was started by one of our software engineers, Jonas. He was the sole programmer on a project he chose in order to test out a couple of ideas around a chat tool using AJAX. After he showed the initial idea to a few of us internally, we became excited about the prospect of using it for our own web site.

There are dozens of such chat tools out there, but most are hosted-only solutions and are generally a little too complicated in the wrong ways and not complicated enough in the right ways. We thought there was still a good opportunity here to make something that was extremely simple to use, while  effectively allowing web site visitors and web site operators to communicate.

So a few of us jumped into Jonas’ project, improved the UI and adding dozens of new requirements. Everything from the exact size of the client window to the color and appearance of every chat conversation was carefully scrutinized. We wanted to make sure all of the product’s features were easily discoverable and didn’t require explanation.

What started out as a technical AJAX and Javascript learning project with some ASP.NET back-end quickly became a design exercise for the most effective user interface. All the focus and effort was put into making the user interface on both the client and the operator sides as clean and intuitive as possible.

Considering the project went from conception to final release in less than 60 days, the result is absolutely amazing. I’ll let the product speak for itself, and  also point out that it truly speaks volumes for how important it is to have an amazing team and to give them the freedom and motivation to innovate. To let the product market itself, we’ve made PureChat free for single-operator installations.

So go ahead. Try it and out and see what you think.

Posted in Development, Team | Tagged: , , , | No Comments »

The Scorecard: Apple, Dell, Google and Microsoft

Posted by Hamid Shojaee on January 21, 2008

Last week I attended MacWorld for the very first time. I was the only attendee running Windows Vista on a Dell notebook. I had to avoid Jobs just so I didn’t get kicked out of the event. If he’s quick to tell a fan how rude they are for requesting a picture, imagine what he would have told me if he would have seen me with a Dell!

The Jobs Keynote was absolutely awesome. One of my favorite announcements was the major upgrade to Apple TV with HD Movie rentals. To me, this completely eliminates the need for either HD-DVD or Blu-Ray. The MacBook Air was also a phenomenal product. Unbelievably thin!

But the MacWorld event was far from perfect. In fact, when compared to Microsoft events it was the worst event I had ever attended. I have been to quite a few Microsoft events including PDC, TechNet, Mix, WWPC and several internal events and I had never seen anything as poorly organized as the MacWorld event. Everything from the MacWorld web site, to event guides, schedules, registration, food and staff was the worst I had ever seen. Considering how insanely great Apple products are, I was expecting an Apple-like quality to the event, which did not exist. The event was so amateur in flow and feel that a typical Microsoft event attendee would have guessed this was the first event of its kind. Even then, it would have been inexcusable.

That triggered me to think about a scorecard for four of the main tech companies in our industry: Apple, Microsoft, Dell and Google. Each of these companies is exceptional at something, but none of them are great at all. Without any scientific data to back my claims, here is how I would personally rate the best company in each category:

Apple, Dell, Google and Microsoft

Operating Systems – Apple’s Tiger and Leopard both outshine Vista for a number of reasons: performance, overall system responsiveness, included user apps, system stability and better search. As an operating system, Apple’s OS X is clearly better than Vista.

Notebooks – If Apple’s notebook designs, magnetic power cords, slot load DVDs, weight or ultra small size had not won you over, the fact that each of Apple’s notebooks outperform the others in their class should get you to notice. The MacBook Pro was named the fastest Windows notebook reviewed by PC Magazine! There’s no question Apple makes the best Notebooks.

Desktops – Although Apple’s desktop offerings are somewhat limited with the iMac, Mac Mini and Mac Pro, there aren’t comparable systems that come close in packaging, size and performance in any of the categories. Dell’s XPS All-in-one is a blatant copy of the iMac. It’s too little too late.

Servers – Dell’s server line still outshines Apple in filling the variety of needs as well as beating Apple on price and the badly needed services for high-availability.

Hardware Variety – Dell is the hands down winner in providing the largest variety of hardware. Ironically, this could be a double-edged sword for them making it much more difficult to improve a product line that contains hundreds of products vs. just dozens.

Hardware Configurability – Again, Dell comes out ahead of Apple on configurability, but once again, this is a double edged sword. While it’s great that Dell offers 10 different video cards, the lack of focus ensures a hit or miss when it comes to drivers.

Product Aesthetics – I don’t need to comment on this one. Most companies couldn’t spell Aesthetics until Jobs came back to Apple.

Web Applications – Google is the clear winner when it comes to web applications for a variety of reasons: super fast pages, no clutter, ads that you don’t mind, always available and free. Microsoft’s MSN and other web offerings have always fallen short on all of those criteria.

Developer Tools – There’s no question that Microsoft takes the cake on this one. The Visual Studio product line has been a slam dunk winner with developers, thanks in large part to Scott Guthrie. Scott is one of the only remaining executives at Microsoft who gets it, but the rest of the world is catching up fast and Scott is fighting an uphill battle with the rest of gang at Microsoft.

Developer/Partner Programs – Microsoft again clearly has the better developer and partner programs with Empower ISV, Certified and Gold partnerships. They also have a longer history of being relatively nice to partners when compared with Apple (or even Oracle). Even Steve Jobs admitted that Microsoft has always been better at partnering that Apple. The shaky iTunes partnerships are a great example of Apple failing to keep even large partners happy.

Conferences & Events – If you’ve ever been to a Microsoft event, you know that registration is fast, organization of class schedules and web site management of individual schedules rocks and the abundance of food, drinks and snacks are nearly overboard. By contrast, I have nothing good to say about the MacWorld logistics and with the exception of the MacWorld keynote, the rest of the contents are on par.

Innovation – Apple is the most innovative large company in existence today. They are the only company that doesn’t shy away from building everything that goes into their products, both hardware and software. Google and Microsoft have stuck with software while Dell has stuck with hardware and even with the focus, none of them have done a great job.

Customer Service – This was a tough one. Microsoft and Google are clear losers in this regard. For me, the race was between Apple and Dell. On the consumer side, Apple wins hands down because Dell has outsourced its support to an incompetent company. On the business side, if you have the right account, Dell win beats Apple, but since Dell only wins IF you happen to be a valued customer, I had to give it to Apple.

Customer Comes First – Microsoft is the only company that puts customers first at all cost. They clearly listen to their customers and they react fast. None of the other companies come even close. Google and Apple are too closed from the outside to put customers first and in Apple’s case, they have clearly shown they don’t mind slapping a few customers here and there. Dell does a decent job as witnessed from the variety of computer lines they offer.

Return Policy – Dell takes the prize on return policies. No hassle, 30 day returns. In contrast, if you take a brand new computer back to an Apple store that you bought earlier that day, they’ll want to charge you a 10% restocking fee. Not cool.

Warranty Policy – Again, Dell’s warranty is significantly better and they actually send you replacement parts to fix your computer. Apple expects customers to send back their machines. Please!

Corporate Transparency – Microsoft is by far the most transparent of the companies with the most employee bloggers and for the most part, they are free to say what they want. Microsoft even has dedicated staff that participate in user forums, help user groups and other communities around their products. None of the others come even remotely close.

Employee Accessibility – Again, Microsoft’s employees are the most accessible. They are the most likely to return an email, escalate an issue or even take your phone call.

Passion – The measure for a company’s passion has to come from the users of their products. Clearly Apple has the most passionate users who often would be willing to part with a limb than with their Apple products.

Environment – This was a tough call. With Google actively promoting green technologies, using solar power for 30% of their electrical needs and subsidizing the purchase of hybrid cars for their employees, I could have easily called it a tie with Apple. However, I decided Apple has a much more difficult job of being environmentally friendly and they have taken a very proactive approach to the issue with their products, designs, packaging and even an environmental activist on their board (Al Gore).

Overall – If I could just own 1 product from any of the above companies, my decision would only be amongst Apple products. Nobody else would even get a consideration. It’s an easy choice to pick Apple as the overall winner amongst tech companies who are doing [most] things right.

So if you’re wondering why I still walk around with a Dell notebook, the answer is I was waiting for MacWorld to make sure I purchase the right product. My MacBook Pro is on its way.

Posted in Business | Tagged: , , , , , , | 13 Comments »

Marketing is the Product’s Job

Posted by Hamid Shojaee on January 14, 2008

Fiji water travels more than 5,000 miles to get to your handsThere is a view in the business world that “a great salesperson can sell ice to an Eskimo.” I used to think this was absurd, until I found myself sipping water from a bottle of Fiji. With a little research, I realized that this $15 billion industry known as “bottled water” didn’t even exist 20 years ago. 20 years ago, everyone was content with water that flowed from their faucets and drinking fountains, but all of the sudden we have a preference for water that travels more than 5,000 miles to reach our hands and we’re willing to pay hundreds of times more than a glass of water from a reverse osmosis filtered faucet (equally good in quality).

Wow! I’m an Eskimo buying ice.

The business wisdom that “a great salesperson can sell ice to an Eskimo” speaks the truth. Here is a product that requires zero R & D. Any one of us could make equally good bottled water in our own homes as the multi-billion dollar counterparts and yet a company out in Fiji or France or half-way across the country is successfully selling this product to us. How can that be?

An even worse example of this type of successful salesmanship is of the millions and millions of people (myself included) who have bought PCs that were preloaded with Microsoft Windows when they already had a license of Windows they intended to use. In fact, most software developers I know wipe out the operating system that ships with their machine and install their own licensed copy. I have personally paid for at least 15 or 20 copies of Windows XP Home Editions that were pre-installed on Dell machines, even though I have never ever used Windows XP Home Edition on any machine.

This is like selling ice to Eskimos for the purpose of throwing it in the ocean. Except, I guess, that I had a choice when I paid for that bottle of Fiji water, and I didn’t have the choice of buying a computer with no OS from Dell.

Of course, these extreme examples of gaming the consumer are rare, hard to plan for and eventually, they die out. With environmental issues becoming more important to Americans every day, buying water from half-way around the world is becoming less and less appealing. Eventually, it will end.

And while Microsoft is working hard to create the image of “innovator” and a “fair competitor,” more than 20 years of forceful salesmanship has finally caught up with them. The technology veterans of our industry are more skeptical and negative towards Microsoft’s efforts now than they have ever been. It will take a while before the tech industry forgives Microsoft.

Companies That Earn Respect

Over and over I’m finding that the companies I respect the most and and get excited about are those that build products that market themselves. Just about everyone who has played the Nintendo Wii in the past year has become a spokesperson for the company. Google’s marketing budget in its first 5 years was virtually non-existent. YouTube became a household name before it even knew how to spell marketing. Before anybody had ever seen a Toyota Prius ad, there was a waiting list to buy the car.  For 7 years in a row, owners were marketing the car as if they were getting a kickback from Toyota.

So, is it possible to sell ice to Eskimos? As absurd as that sounds, yes it’s possible. But given the choice, why would you choose to swim upstream and work really hard at “selling”? Yes, it’s even possible that with the right strategy, timing and square packaging, you might even be able to do extremely well with a product that needs a lot of marketing. But you might find that putting that energy and effort into building a product that can sell itself will be a better investment and create more loyal customers.

Create a company and a product that earns people’s respect and you will find your marketing is already at least half done.

Posted in Business | 1 Comment »

Lessons from Microsoft: Innovation and Competition

Posted by Hamid Shojaee on January 7, 2008

Innovate to Create Better SoftwareWhile I was at Microsoft, they had programs like “Sun Down” and “Beat Oracle” that took direct aim at competitors Sun Microsystems and Oracle. They provided the sales teams with talking points and when it came to larger deals, everyone was available from devs to PMs or even Steve Ballmer, if it meant killing the competition — even at a loss.

Microsoft plays to win. Yes, to a fault.

Killing the Competition

I’ve been paying attention to the software business for the last twenty years or so, and in that time I’ve watched Microsoft nearly wipe out WordPerfect, Lotus, Stac, Apple, Novell, Netscape, AOL and Sun just to name a few. They’ve had their market success, not by innovation, but rather with the strongest showing of competitiveness, and a willingness to do whatever it takes to win.

So, if winning meant OEM deals that bound hardware vendors to not install other OSes on any machines they sold, so be it. If winning meant making deals with ISPs that disallowed the distribution of Netscape, while including IE as an “inseparable” component of the OS, so be it. If winning meant copying every innovative aspect of Java (like virtual machine, byte code, garbage collection, etc. almost to the letter) with the introduction of C#, so be it. Who can argue the success Microsoft has realized by placing competitors into the middle of their crosshairs and firing.

They do an incredible job when they focus on beating a competitor. It has been a main driving force of the company since its earliest days.

When your main driving force is beating the competition, what do you do when you’ve actually beat them? That’s what happened to Microsoft by the late 90s. They had beaten virtually all of their competitors. They had beaten Apple so bad that they were willing to give them $150 million cash to help breathe back some life. Netscape was all but destroyed.

By 2000, Microsoft’s market share of Operating Systems and web browsers were both in the high 90% range. In 2001, Microsoft put out Windows XP, it’s best version of Windows to date and Internet Explorer V6, the best browser at the time.

Then, Microsoft seems to have had no idea what to do next. There were no more serious competitors to pummel in these areas, so it shifted its focus on to Java and Oracle (which happened to be during my time at the company). In 2001, everywhere you went (inside of Microsoft), you’d hear Sun, Oracle, AOL and LAMP (the collection of Linux, Apache, MySQL and PHP). By this time Google was well on its way, but no attention was being given to Internet search. Microsoft believed that AOL’s strategy of locking in Internet Users and shoving content down their throat (as AOL had done with its acquisition of Time Warner) was a good strategy that needed to be copied and a competitive threat that needed to be beaten. So the focus was on AOL rather than Google or Yahoo.

Ballmer is famous for looking for billion-dollar market opportunities and in 2001, Google wasn’t a billion-dollar competitor. In order for a market to be worth a billion dollars, it has to already have some major competing players. That’s where Ballmer is short-sighted. If the year was 1979 again, Ballmer wouldn’t bother with the OS business, because it would have been to be worth only a few million.

Vista and IE 7

After the release of Windows XP, it took Microsoft another 5 years in a scrambled effort to put out another version of its Windows operating system. 5 years of work on a world-class OS wouldn’t be so bad if Microsoft had nailed it with Vista, but it was obvious that Vista missed the mark in a big way. First, some major compelling features were dropped in the final year to get Vista out the door. Second, it was plagued with all kinds of bugs from device drivers to missing features. Third, there were definite signs of “borrowing” from Apple’s now resurging OS X.

Internet Explorer had a similar 5-year absence. It wasn’t until Firefox started to make headlines capturing 10% of the browser market that Microsoft started to take note. Again, it was a quick push to fight off the competition. So after 5 years of intensive development on IE 7, Microsoft gave us tabbed browsing. As Microsoft had predicted, the “WOWs” started coming in 2007. Except, it wasn’t what Microsoft had hoped. Instead of “Wow, I can’t believe how awesome Vista [or IE 7] is,” it was “Wow, I can’t believe how lame Microsoft has been all these years and I’m just starting to realize it now!”

Microsoft’s focus on competition has made them one of the most successful and profitable companies in the world. It’s hard to argue with that. There is no other company in our industry that comes even close to adding $16 billion in profits with the passing of each year. In 2008, Microsoft will make another $16 billion or more in profits — more than Apple, Google, Sun and Oracle combined. But 2008 will also mark a turning point for Microsoft. It will feel the heat from the innovation machines at Apple and Google more than ever before.

Years of being competitive-driven, rather than innovation-driven have caught up with Microsoft.  A negative, anti-Microsoft sentiment was planted in the tech world about 10 years ago and it’s coming into maturity.  The tech elite have a beef with Microsoft and rightfully so. It’s not always about profits.

Focus on Competition and You’ll Kill Innovation

The lesson here is not to ignore your competition. On the contrary. Microsoft has shown us that at the very least, it’s important to know your competition. You can’t ignore competition. But like everything else in life, there needs to be balance. Microsoft has been historically overly focused on competitors and therefore, it has been plagued with an image that lacks innovation. It’s not just an image, it’s true. That’s why no matter how much they spend on PR, it’s a lost cause.

Their lack of innovation has been proven with 5 years of nothingness from the OS and IE teams during a time when there was virtually no competition. When the competition started to innovate, Microsoft’s OS and IE teams woke up, not with innovative new features of their own, but simply playing catch up and copying the innovation that was coming from competitors.

Now Microsoft is paying the price. OS X is making huge gains in market share and Firefox’s momentum continues. 2008 will be the year of Apple. Before the year is over, Apple will have double-digit market share and the sea of switchers from a Windows-only PC to a Macintosh will seem unstoppable.

Microsoft, Apple and Google are clearly the giants of our industry. Most of our projects pale in size comparisons, but there are clear lessons to be learned by watching the giants dance. If you find your project’s requirements read awfully close to the feature set of a competing product, your project is lacking innovation - it’s a Microsoft-like project. If you spend more of your day worrying about what your competitors are doing vs. thinking of new ways to solve your customer’s problems, you’re spending too much time on the wrong stuff.

Companies that release mega-hit products generally share one thing in common: a different approach. Put another way, they share the drive to innovate. They focus little on having another checkbox next to a feature to make their product look as good or better than a competitor. They let the marketing department worry about the checkboxes. Instead, they spend their time building a solution in a way that has never been built before. That, in itself is the best possible way to market the product. Innovation creates dedicated, loyal and sometimes evangelical customers who go out there and sell your product.

Don’t worry about your competitors. Innovate.

Posted in Business, Development | 17 Comments »

Why Choosing the Right Technology Matters

Posted by Hamid Shojaee on December 31, 2007

Choosing the Right Technology can Make or Break a Ship DateThere is a lot of debate these days about whether or not the technology behind a product matters. Does it matter whether you choose C# or Java as your programming language? Does it matter if it’s on Windows or Linux? Does it matter if it’s MS SQL or MySQL?

The conventional wisdom is to view this issue from an end-user’s perspective. To the end user, the technology doesn’t matter. It’s the product that’s important. If the product is good, the users don’t care if it’s written in Java, C# or Cobol. They just want something that solves their problem.

But a lot of software companies and IT shops are using this argument to imply that the technology they choose for development makes no difference. Who cares if they choose Perl or Ruby or C#? After all, the end users don’t care, so why should it matter to them?

The fact is, choosing the right technology matters more than most people think and could be the difference between shipping a great product and creating vaporware. Today, it would be comical if an IT shop chose Cobol as their development language or banked on FoxPro as their database backend for new projects. If the technology didn’t matter, these should be sound choices, but it’s obvious to most in the software business that banking on these particular technologies would have disastrous results. So the question is why? Why does choosing the right technology matter?

There are a number of reasons:

  1. Attracting the Right Talent - By far the most important aspect of choosing the right technology is making sure you can attract the talent that can get the job done. If the best brains in the world, the ones that can get jobs anywhere, avoid your project because of the technologies you have chosen, you’ll be left with second tier software engineers who are forced to accept a position purely for financial reasons. As tough as is to find truly talented people in the US job market today, you want every advantage you can get. So, choose the technology that will attract the best possible talent.
  2. Time to Code - The amount of time it takes to write a solution to a problem plays a huge factor in choosing the right technology. If you plan to write a program that will be used in the 2008 Super Bowl on February 3rd and you are starting to write code now, you better choose technologies that can provide huge shortcuts in writing the code. Delivering a solution on February 4th, no matter how good, is completely worthless. On the other hand, if you are choosing shorter coding time when time to market is not an exceptionally important factor, you may be picking a technology that does not scale well as the application grows in popularity.
  3. Execution Speed - As computers get faster, there’s less and less concern with the execution speed and hardly any thought is given to which technology should be chosen based on this criteria. But talk to any serious game developer and they’ll set you straight about the importance of execution speed of their code and why this factor alone has kept them one generation behind on the latest language developments. When C became popular, game developers were still doing assembly. When C++ was big, they finally made the switch to C and while C# and Java have taken over, games are still largely written in C++. The reason? Execution speed.
  4. Code Maintenance - Choosing the right technology from the standpoint of code maintenance can mean the difference between longevity and M.C. Hammer. If the code cannot be easily maintained, enhanced and expanded, it will collapse under its own weight.
  5. Future Support - Will it be around in the future? This is a tougher question to answer, but if the future support of a technology is largely in question, it might be smart to avoid it. If a technology does not hit the mainstream, it will be harder to find talent and there will be a lack of state-of-the-art development tools, affecting time to code and execution speed. Choosing popular technologies that are well supported by the industry and profitable companies can be an easy way to avoid future pitfalls.

Although the casual gamer enjoying a video game couldn’t care less if the game he’s playing was written in C++ or Python, the success of the game largely depended on the chosen technology. That’s why you’ll find larger more sophisticated IT organizations care a great deal about the underlying technology of the products they choose. They want to make sure the future viability of the products and companies they choose are sound.

At Axosoft, our choice to adopt Microsoft .NET and SQL Server as the technologies of choice has given us a significant competitive advantage providing us an edge in each of the 5 categories mentioned above. From attracting the right talent (developers often leave their jobs just to use newer, more exciting technologies) to shorter time to code to execution speed, code maintenance and future support. In each of these categories, .NET provided Axosoft with a significant competitive advantage allowing us to grow faster and provide a more solid product.

Posted in Development, Team, Tools | 6 Comments »

Rules for Being a Green Software Engineer

Posted by Hamid Shojaee on December 24, 2007

Yes, Develpers CAN be More Green - it’s our ResponsibilityRecently, I got a link to The Story of Stuff by Annie Leonard. This is an amazingly well done 20-minute video about how stuff is made, sold and disposed. She does a phenomenal job of putting the Story of Stuff together and selling the viewer on the importance of being Green. If you only have 20 minutes, I’d rather you watch her video than read this article, so go do that if you haven’t already.

Then I got to thinking, as software engineers, what’s our responsibility for being green? I did a couple of searches and ended up with nothing. The general view appears to be that software developers are automatically green. After all, how could software not be green? It’s just a bunch of bits, right? Software hardly has an environmental impact, or so is the consensus.  Can software be any more green than it already is?

As I thought more about the subject, I realized that in fact there is a huge variance in software greenliness (new word?).  The notion of green has always existed in software development under a different name: “Simple!”  Yes, simple, is the word we have used to describe the most green software in our industry and some of the most successful software products of all time have been the greenest solutions. I’ll get to some examples in a minute.

But software developers don’t think in terms of developing green software.  On the contrary.  Because we assume all of our solutions are by default green, we end up doing things that have a huge negative environmental impact without realizing it.  As software engineers we rely heavily on a few fundamentals to help us determine the best possible solution:

  • Moore’s Law - By far, the most influential theory on software development for more than 4 decades has been Moore’s Law. Not truly a law of nature or science in the traditional sense, Moore’s Law was simply an observation based on the historical trend of integrated circuits approximately doubling their number of transistors every couple of years. Faster, cheaper and smaller computers being just around the corner has been the most perfect argument for writing slower, bloated and more expensive software for millions of developers over the years. I confess, I have been one of them.
  • Cost of Development - As software engineers we are taught to do cost analysis in the following way:

- Algorithm X takes 1 month to develop and takes 1 minute to finish its calculations
- Algorithm Y takes 2 months to develop and takes 30 seconds to finish its calculations
- The resulting algorithm will be run thousands of times every day, enough to keep at least one or two servers extremely busy.
- Which algorithm should we choose?

We would do a quick cost analysis and conclude that 1 man-month of a developer’s time (in the US) costs at least 2 or 3 times more than an additional server. It would be hard to argue for choosing Algorithm Y when the up-front hard costs are 2 to 3 times as much as Algorithm X.  So the slower, less green, Algorithm X wins.

  • Laziness - As software engineers, we hate solving the same problem over and over again, so we build libraries of code and reuse other libraries as much as possible. This is generally great and very green! But, increasingly, we rely on 3rd party components that are thousands of times larger than the portions we actually want to use. As a result, we ship a product that requires ten times or a hundred times more disk space and memory than if the product was developed completely in-house. Of course, developing completely in-house could mean you’ll never finish the product and is not practical, but like everything else in life, there’s probably a good balance that can be maintained that makes sense for the project.

We are taught these things in school and at work. Being efficient from an economical standpoint, not a coding one, is the most important rule. Laziness and not reinventing the wheel at all costs is a trademark of a software engineer’s mentality and we can always rely on Moore’s Law to automatically solve our coding problems within a couple of years. By following the traditional wisdom, software engineers can save a little on development time, but very directly we are forcing the rapid adoption of newer, faster PCs with more memory and disk space.

We, as software engineers, are the number one marketers of hardware. We help PC manufacturers sell hundreds of millions of PCs every year just so users can run our software at a reasonable speed. That’s why when the ship-date of a product like Windows slips, stock analysts lower the estimated sales of Dell and HP. But it’s not just Windows that helps sell hardware - Windows just happens to have the most impact because it’s the world’s most popular software application. The new Windows Vista Flip 3D feature that allows you to switch between apps will probably be responsible for the sale of millions of new machines because of how painfully slow it runs on older systems.  This new feature of Vista is by far the most Visible - it’s even in the Vista commercials - so it will be the first thing that any new Vista user will want to try.  When they realize it doesn’t run on their machine, it’s time for an upgrade.

So as software creators, we are largely responsible for the adoption of new hardware. The smallest things that we do can make a big difference. We can’t simply wash our hands free of the environmental responsibility and put the blame on the hardware guys. Sure they want to sell more hardware, but we’re essentially their free sales force.

Rules for Writing Greener Code

I propose a set of software development guidelines for developing greener solutions:

  1. Choose Faster Code over Future Hardware. Yes, if you wait 2 years and run your code on a future device, it will run twice as fast as it runs today, but that’s exactly the wrong attitude. To be a green developer, don’t use the fastest machine you can find as your acceptable performance benchmarking system. Instead, use a machine from 2 or 4 years ago with less memory, slower CPU and smaller hard drive. If it can run on that machine with acceptable performance, your contribution to the rapid replacement of hardware is significantly less.
  2. Include Environmental Costs in Your Cost Analysis. You might find that writing slower code and buying more servers costs a lot less than the cost of another month of development, but don’t forget the hidden costs of more servers. These days the data center electricity alone that a server uses in a given year can cost as much or more than the server itself, not to mention rack costs, cooling costs, bandwidth costs, software costs and the environmental impact of all the materials and manufacturing processes that goes into creating the server itself.
  3. Be Memory Conscious. With most developer machines having 2 or 4GB of memory these days, developers often forget that there are hundreds of millions of PCs out there with just 256MB of memory (or less!). Even 256MB is an unbelievable amount of RAM. I couldn’t imagine having that much memory on a computer at the start of this decade and now I have 2GB! It’s because developers use memory as if it was free. The argument is that memory doesn’t cost anything. You can pickup 1GB sticks for under $100! The problem is for a large number of machines that are not capable of having 1GB of memory, you need to replace the entire machine and guess what happens to the old machine?
  4. Build in-house When Possible. Using 3rd party components and external controls can be a great way to save time in the development of an application, but make sure you’re not using 100MB worth of components for 1MB of gain. If the ratio of things you use in your 3rd party controls to things you don’t use is 1:100, that’s bad. It’s not just bad for the environment; it’s even bad for your end-user experience.
  5. Go Back and Solve it Again. Every developer knows at least a dozen areas of their software that they could have coded more efficiently. Often the performance of re-solving critical areas can gain an order of magnitude in performance improvements. But we never go back to do it again because we’re busy adding the next new feature. Going back and solving problems we have already solved might seem like a waste of time, but it’s often very satisfying to cut down hundreds of lines of code to just a few lines and make it much much faster.

How Coding Green Translates to Shipping Great Software

So you might be asking yourself how do these rules relate to Shipping Great Software OnTime? To answer that question, let’s take a look at some of the characteristics of green software:

  • Simple - The more Green a software application is, the simpler it is. So if two products can solve the same problem equally well, the greener solution will generally win. Examples include Google Search beating Alta Vista. Gmail beating Hotmail and Yahoo Mail. Flickr beating virtually all other photo sites at the time. The trend is clear.
  • Fast - Greener software is going to execute faster and as a result enjoy faster adoption. Again, given the choice of two products that solve the same problem equally well, the one that executes faster will win. A great example here is the rapid and surprising adoption of FireFox. Although it still has not beat IE (a product that ships with the OS, giving it a significant marketing advantage), the adoption of FireFox has been a phenomenal and surprising success. Between IE and FireFox, clearly, FireFox is the greener tool which runs faster and consumes significantly less resources. When you ask a FF user why he or she switched, the number one reason is that FF is much faster.
  • Lower Resource Usage - Greener software takes less system resources to execute. Again, given the choice of two products that solve the same problem equally well, the one that requires less resources will be preferable. Although FireFox can be used as an example again, I’m going to use the example of Apple’s OS X. As far as operating systems go, OS X is definitely greener than Windows. The latest version of Apple’s OS X Leopard runs well even on a PowerPC G4. That’s a chip that’s about 4 generations behind today’s latest CPUs. That would be the equivalent of getting Windows Vista to run on a Pentium 3. When you ask recent “switchers” from the Windows platform to OS X why they switched, a recurring theme is that OS X is faster, more reliable, it’s not as choppy and things just work. Lower resource usage is a significant advantage of OS X in this case and you sure don’t see a lot of people switching the other way to ask why they switched.

I suspect that some of you might want to ask me “then why didn’t DOS beat Windows? DOS is clearly the greener OS.” The answer is that the solution has to solve the problem “equally well.” DOS, although greener than Windows, was also single-threaded and provided an awful text-based interface. It was not intuitive to the average user and was limiting in hundreds of other ways. So DOS did not provide an equally good solution to the OS problem.

Writing greener software could be a significant competitive advantage, and as a byproduct, it could be better for the environment. It seems to me like a big win all-around.

Posted in Business, Development, Team | Tagged: , | 5 Comments »

What’s the Developer’s Incentive to Ship?

Posted by Hamid Shojaee on December 17, 2007

Developers Must have an Incentive to Ship in order to Ship Software On TimeThe company always has a substantial incentive to ship. Usually, it’s financial. If you don’t ship the software, you can’t sell it. If it’s an internally used tool or a line of business application, then the company’s incentive to ship is to increase user productivity (again a financial incentive). To the company, shipping the software affects the bottom line and the incentive to ship is clear.

But what’s the incentive to ship for the software developers? Those are the guys that control the real ship date.  In nearly every company I have ever seen, there is virtually no incentive to ship for the developers. In fact, in most companies, developers have an incentive not to ship! Sure, you can argue all you want that if they don’t ship, they risk the chance of losing their jobs as the company might suffer layoffs. Theoretically, improving your company’s financial well-being so you can keep your job should be a big incentive.

But Windows Vista didn’t ship for 5 years, 3 years later than the original plan. How many developers lost their jobs? Zilch. Plenty of companies are financially secure enough to withstand slipping ship dates without resorting to layoffs. Whether the software is for internal use or if it’s the core product that the company sells, developers don’t feel much pain from slipping ship dates. As the ship date continues to slip more and more, the sense of urgency, importance and chaos continually increases, adding some spice to an otherwise boring job. So there could even be hidden incentive not to ship. That’s a flawed system.

If a developer does the identical work the day after the software ships as the day before the software ships, from the developer’s perspective, shipping software is a non-event. After all, what’s the big deal about shipping software if I’m going to continue to do the same thing I was doing yesterday? Some individual team members are independently goal driven to ship. Hopefully, that’s the makeup of your team. But if I had to guess, judging from the norm of slipping ship dates for software projects everywhere, I suspect the vast majority of teams are made up of developers who are not overly anxious to ship software. What can you do?

Building an Environment that Encourages Shipping

Google is famous for the “20% time” it gives its engineers to work on projects they like. The way this works is that engineers are allowed to spend 20% of their time on whatever project they want, not necessarily the one that the company is banking on. Ask any engineer what they think of Google’s 20% time and they’ll say something that resembles “awwweeeesome!” But ask a manager or an executive of any company about Google’s 20% time and they are filled with fear. Fear that something like that would cut their productivity by 20% - how could they possibly afford that? The typical executive might even think Google is leaving productivity room on the table and at some point they could eliminate the 20% time and improve productivity by 25% (going from 80% to 100% is a 25% increase for those of you keeping track).

That’s a short-sighted view. Here’s why:

Most engineers at Google “save up” their 20%-time until the appropriate time in their main projects when they can work on their fun projects. Take a wild guess as to when the appropriate time to work on their 20% fun project is. You guessed it. It’s immediately after their main project ships!

Now imagine you are an engineer who [thinks s/he] has a brilliant idea. Over the past 8 months, you have saved up 30 days of 20%-time to work on your brilliant idea, but the only way you can start working on it is if you ship your main product!

How driven are you going to be to ship your project as soon as possible when you know your fun project won’t start until your main project ships? Are you going to allow scope creep? Are you going to work on that cool new feature you thought of that nobody cares about or are you going to hammer out the features from your todo list? Now you understand why Google’s release cycles and continuous application improvements have been relentless and have far outpaced the industry average.  They have a pool of engineers who are eager to get on with their own projects and the only way to do that is to ship.  Now that’s motivation!

We do something very similar at Axosoft. We never called it 20% time. We just called it a “fun side project.” After major releases of OnTime, we generally brainstorm and come up with a number of side projects that developers want to work on. They can do whatever they want. Software, hardware, web apps, automatic tuna sandwich maker, whatever. Then we spend the next 30 days working on fun projects.

This is the equivalent of taking a vacation, but rather than being stressed by the typical airport security, hotel and other vacation-related nightmares, you actually get to do something you love! For most developers it’s even better than a vacation! Software engineers love to build stuff.  Most of us get a tremendous amount of satisfaction from seeing ideas come to life.  The more exciting the ideas, the more satisfaction we get and nothing is more exciting than our own ideas.

It’s easy to provide a good incentive for developers to ship.  Just don’t think of it as a loss in productivity!

Posted in Business, Development, Team | Tagged: , , | 5 Comments »