Tuesday, January 15, 2008

Internet Explorer finally gets "As you type" search

Internet explorer has been my default browser for a long time. I like it better than FireFox (OMG!) and for the work I do and the websites that I visit - it works best. Only occasionally do I have to whip out FireFox to visit a "non-compliant" web-page.

Though there has been one feature that I always missed in Internet Explorer that I had grown to love in FireFox: the "as you type" search feature. In FireFox, whenever you hit CTRL+F, it would open up the find toolbar at the bottom and as you typed a word into the find box, the word would get highlighted in the browser. If there was more than one match - then you could view them via the provided buttons.

1 Firefox's search bar

In Internet Explorer (even the most recent version IE 7), when you hit CTRL+F, you get the good old find dialog that one finds in all the staple desktop applications like Notepad, etc.

2 Internet Explorer's native Find dialog

In this day and age and after so many years of FireFox's goodness being out there - you would have thought that Microsoft would have added this type of a search in its Internet browser. No such luck! Go Figure! Though the find as you search was available via a IE add-in called "findasyoutype" written by Sven Groot.

Well, today I upgraded to the Google Toolbar version 5 beta for Internet Explorer. I hit CTRL+F and what do you know - no crappy old Microsoft Find dialo5g, but an actual Find As You Type toolbar pops up at the bottom.

3 Google's Find toolbar for IE 

The find as you type toolbar pops up when you press CTRL+F, or click on the Find button 4 on the Google Toolbar. In addition the Find button's drop down lists all the words that were used to perform a Google Search. (Google Toolbar Word Find)

Google just gave me another extremely important reason to stay with their toolbar instead of using the Microsoft search toolbar.

Try the new: Google Toolbar 5 beta for IE.

All features: http://toolbar.google.com/T5/intl/en/features.html

The only feature that I don't like right now is the redesigned way in which one adds bookmarks to the Google Toolbar. Previously, it used be a normal dialog. Now its a balloon that is not rendered correctly and feels very clunky. Hope it gets a make-over or returns to the original style by the time the final version is released.

6 Save Bookmark to Google Toolbar - balloon.

Thursday, January 10, 2008

Free Neighborhood Geocoding

This information has appeared all across the GIS blogosphere. Urban Mapping has 11 methods as part of its API - that allows for geo-coding using neighborhood information. What is news worthy is the fact that the following 4 methods have been opened up for free access.

  • getNeighborhoodDataByID
  • getNeighborhoodsByLatLng
  • getNearestNeighborhood
  • getNeighborhoodsByName
  • Documentation and more information available from : http://ws.urbanmapping.com/neighborhoods/doc

    Get Rid Of Telemarketers

    This information is so useful that it would be shameful to not share it.

    I keep getting "harassed" by unwanted phone calls. The worst are the automated ones - as there is no one to tell - "Please take my number of your calling list".

    This guy has recorded the "Out of service" or "Phone number non-existent" tone. Record it at the beginning of your answering machine's message - and the bot will think that it has reached a number that has been disconnected. According to this blogger - it made all his bot calls go away - that's got to be gold!

    Will update on how it works for me!

    The file can be downloaded from the bottom of the guy's post. Telemarketers: Get Rid Of Telemarketers, Debt Collectors, And Other Vermin With Phone Tones

    Top Ten Myths of Entrepreneurship

    A good article from Guy Kawasaki's blog about the top ten myths about entrepreneurship.

    From How to Change the World: Top Ten Myths of Entrepreneurship
    This post was written by Scott Shane as a follow up to his entrepreneurship test.

    I have highlighted the portions that I think are the important take away points for each of the myths.

    1. It takes a lot of money to finance a new business. Not true. The typical start-up only 1 requires about $25,000 to get going. The successful entrepreneurs who don’t believe the myth design their businesses to work with little cash. They borrow instead of paying for things. They rent instead of buy. And they turn fixed costs into variable costs by, say, paying people commissions instead of salaries.

    2. Venture capitalists are a good place to go for start-up money. Not unless you start a computer or biotech company. Computer hardware and software, semiconductors, communication, and biotechnology account for 81 percent of all venture capital dollars, and seventy-two percent of the companies that got VC money over the past fifteen or so years. VCs only fund about 3,000 companies per year and only about one quarter of those companies are in the seed or start-up stage. In fact, the odds that a start-up company will get VC money are about one in 4,000. That’s worse than the odds that you will die from a fall in the shower.

    3. Most business angels are rich. If rich means being an accredited investor –a person with a 2 net worth of more than $1 million or an annual income of $200,000 per year if single and $300,000 if married – then the answer is “no.” Almost three quarters of the people who provide capital to fund the start-ups of other people who are not friends, neighbors, co-workers, or family don’t meet SEC accreditation requirements. In fact, thirty-two percent have a household income of $40,000 per year or less and seventeen percent have a negative net worth.

    4. Start-ups can’t be financed with debt. Actually, debt is more common than equity. According to the Federal Reserve’s Survey of Small Business Finances, fifty-three percent of the financing of companies that are two years old or younger comes from debt and only forty-seven percent comes from equity. So a lot of entrepreneurs out there are using debt rather than equity to fund their companies.3

    5. Banks don’t lend money to start-ups. This is another myth. Again, the Federal Reserve data shows that banks account for sixteen percent of all the financing provided to companies that are two years old or younger. While sixteen percent might not seem that high, it is three percent higher than the amount of money provided by the next highest source – trade creditors – and is higher than a bunch of other sources that everyone talks about going to: friends and family, business angels, venture capitalists, strategic investors, and government agencies.

    6. Most entrepreneurs start businesses in attractive industries. Sadly, the opposite is true. Most entrepreneurs head right for the worst industries for start-ups. The correlation between the number of entrepreneurs starting businesses in an industry and the number of companies failing in the industry is 0.77. That means that most entrepreneurs are picking industries in which they are most likely to fail.

    7. The growth of a start-up depends more on an entrepreneur’s talent than on the business he chooses. Sorry to deflate some egos here, but the industry you choose to start your 4 company has a huge effect on the odds that it will grow. Over the past twenty years or so, about 4.2 percent of all start-ups in the computer and office equipment industry made the Inc 500 list of the fastest growing private companies in the U.S. 0.005 percent of start-ups in the hotel and motel industry and 0.007 percent of start-up eating and drinking establishments made the Inc. 500. That means the odds that you will make the Inc 500 are 840 times higher if you start a computer company than if you start a hotel or motel. There is nothing anyone has discovered about the effects of entrepreneurial talent that has a similar magnitude effect on the growth of new businesses.

    8. Most entrepreneurs are successful financially. Sorry, this is another myth. Entrepreneurship creates a lot of wealth, but it is very unevenly distributed. The typical profit of an owner-managed business is $39,000 per year. Only the top ten percent of entrepreneurs earn more money than employees. And the typical entrepreneur earns less money than he otherwise would have earned working for someone else.5

    9. Many start-ups achieve the sales growth projections that equity investors are looking for. Not even close. Of the 590,000 or so new businesses with at least one employee founded in this country every year, data from the U.S. Census shows that less than 200 reach the $100 million in sales in six years that venture capitalists talk about looking for. About 500 firms reach the $50 million in sales that the sophisticated angels, like the ones at Tech Coast Angels and the Band of Angels talk about. In fact, only about 9,500 companies reach $5 million in sales in that amount of time.

    10. Starting a business is easy. Actually it isn’t, and most people who begin the process of 6 starting a company fail to get one up and running. Seven years after beginning the process of starting a business, only one-third of people have a new company with positive cash flow greater than the salary and expenses of the owner for more than three consecutive months.

    Thursday, January 03, 2008

    Installing Dell Wireless 355 Bluetooth module in Inspiron Laptop

    430-2341I wanted to try and connect to the Wii's remote and use it as a input interface on my windows laptop. The Wii's remote uses Bluetooth to connect to the console. So I needed to add a blue tooth module to my laptop.

    My laptop is a Dell Inspiron 1520. The Dell wireless 355 Bluetooth module is made for this laptop. (The 355 module also works for many other Inspiron models, though the installation instructions might be a little different based on the model).

     

    Here are the step by step instructables to get the 355 module into your Inspiron.

    Tools needed:

    A plastic scribe. (If you cant find a plastic scribe you can use a flat head screw-driver (but be careful as it is very easy to leave dents, scratches and nicks in the plastic areas that you will be working around).

    PC311175

    1. Disconnect the power and remove the battery from your laptop.
      PC311176
    2. Turn over the laptop and open the LCD screen all the way - so that it lays almost flat.
      PC311177
    3. The Bluetooth module goes in a slot located under the hinge cover. To remove the hinge cover you need to use the flat scribe or screw-driver to gently lift the cover up from the front of the laptop.
    4. The hinge cover has a small notch/slot located on the right hand side corner towards the LCD screen. This notch will help you get started in releasing the hinge cover.
      Untitled
    5. The hinge cover is held in place by tabs that lock into the laptop body.
      PC311181 
    6. You will want to start by inserting the scribe into the notch and then gently pushing down the scribe to release the tabs holding the hinge cover in place.
      csl_hin6
    7. As you release the hinge cover (first at the notch) move down towards the keyboard and then work yourself from the right side to the left. You shouldn't have to apply to much force. As you slowly lift the hinge cover from the right side and move towards the left side - the tabs will release and the hinge cover will open up.
      PC311179
    8. Notice that on the left hand side - there are two flat tabs that go flat into the laptop's body. When you arrive at this spot - you should just be able to slide out the hinge cover (if you keep trying to lift up the hinge cover - you risk breaking these tabs).
      PC311180
    9. Once you have removed the hinge cover you will see the slot into which the blue tooth module will sit.
      (Large pink circle area). This area has 3 slots/tab (blue) into which the module will seat. And finally the connector cable will connect the module to your laptop.
       PC311183a
    10. Insert the blue tooth module so that it sits under the slots.
      To do this - hold the blue tooth module by its connector end and then slide it into and under the slots.
      corsic17
       PC311187
    11. Finally insert the connector into the Bluetooth module. (The connector will go in only one way - so don't force it too hard).
      PC311188
    12. Now re-attach the hinge cover.
      Start on the left side by sliding the 2 tabs into the laptop body.
      Working from left to right gently press down on the hinge cover so that the tabs engage and lock into the laptop body.
    13. Re-attach the battery and power cable and start-up your laptop.
    14. In my case the laptop came with the drivers required for the blue-tooth module and Vista started installing them as soon as it started up. In case you need to download the drivers - you can find them here: Dell Support

     

    Things to remember:

    • The hardest part of the installation is the removal of the hinge cover - as its made of plastic and very easy to break the tabs that hold it in place. So be gentle and become familiar with the picture in step 5 which shows the locations of the tabs. Move from right to left while removing the hinge cover - lifting the cover a little as you move along. When replacing the cover - move from left to right - pushing down gently - so as to lock the tabs in place.
      (I am not sure if it will be easy to purchase a replacement hinge cover - so be very very careful with it).
    • It might be easier to slide the Bluetooth module a little bit into its slot - then attach the cable and then push the model all the way in.
    • Remember static discharge is your worst enemy. As you have disconnected the laptop from the power adapter - the discharge can easily find its way to one of the many electronic components and kill your system. So discharge your self by touching some huge metal piece that is grounded - or in my case go find someone to touch and give them a fun jolt of electricity!! :)
    • Also remember the disclaimer: I am not responsible for any issues/losses you may encounter by following the above instructions. You are following them at your own risk.

    Maxtor OneTouch External Hard Drive Corruption

    from Maxtor OneTouch External Hard Drive Corruption

    Recovering from data corruption on Maxtor OneTouch external hard drives246416

    This article may help you if the following applies:
    • You own a Maxtor OneTouch external hard drive.
    • The drive was working correctly, but suddenly exhibited catastrophic data failure.
    • Your Windows computer does not recognize the drive when you plug it in, or you can not mount the drive under Linux.
    • The drive does NOT exhibit any physical drive failure symptoms.
    This article explains how I have recovered from data corruption on the Maxtor OneTouch external hard drives. About a year ago, I acquired four 300GB Maxtor OneTouch II external hard drives. I used them extensively in Linux, and one day I noticed what seemed to be like massive data corruption on the drive. All of a sudden, all the directory and file names were corrupted, and I could not read from any of the files. Power cycling the drive did not help, and I could not read it from Windows either. I thought I had lost all of the data, but I decided to see if I could recover it using disk recovery tools. Fortunately, I found a tool that recovered the drive without any (apparent) data loss. The problem appears to be corruption of the partition table, possibly due to a buggy USB/IDE interface inside the drive enclosure. I have never encountered a similar problem with the Maxtor (internal) hard drives themselves, but I have seen the same corruption on both Windows and Linux platforms. The problem occurs most often during heavy load on the disk, for example during backup and restore.

    The tool that I used is an open source program called TestDisk. It runs under both Linux and Windows, and I have successfully used it on both. The problem again is corruption of the partition table. The tool can automatically rebuild the partition table by looking at the file system. This is how I used TestDisk to rebuild it.

    • Run testdisk as root in Linux
    • Select "Create" a new log file
    • Select the correct disk, for example "/dev/sde - 300GB / 279 GiB"
    • Select "Intel" as the partition table type, assuming you have not reformatted the drive, which should be FAT32
    • Select "Analyze" current partition structure and search for lost partitions
    • It should display one partition that looks something like "FAT32 LBA"
    • Select "Proceed".
    • Press "Enter" again to continue
    • Select "Write" to write the new partition table information
    • Press "Y" to confirm
    • Quit the program
    • "sync" under Linux or "Safely Remove Hardware" in Windows
    • Power cycle the drive

    This should recover the drive, but I am not sure if data corruption occurs in any other part of the drive except for the partition table. My recommendation for preventing further data loss is to copy your data to another drive (non Maxtor) and not use the drive, or store your files in self-validating file systems or file formats on this drive.

    DISCLAIMER: I am not responsible for any further loss of data you may encounter by following the above instructions. I sincerely hope you do manage to recover your data.

     


    Taking apart the Maxtor One Touch 4 500gb Drive:

    Remove the sticky rubber feet and the Maxtor label. There is one screw under the label, remove it.
    Looking at the back of the case (power and USB connectors) with case standing upright, start by squeezing down the right hand side of the plastic top and pulling the halves gently apart, proceed working your way all around the case.
    Inside the plastic case is a metal shell. Remove all screws (including very small ones) and also the ones holding the small PCB with the push button. There are 3 large screws securing the USB interface PCB to the metal work - these do NOT need to be unscrewed (one of them is impossible to get to anyway). Once enough screws have been removed the hard drive + USB PCB will slide out from inside the main metal housing.
    The drive pulls straight off the header on the USB PCB.

    Head Tracking using the WiiRemote (a Johnny Lee production!)

    YouTube - Head Tracking for Desktop VR Displays using the WiiRemote

    Johnny Lee does it again..... this time he uses the WiiRemote to do head-tracking. The results are awesome. The video is a must see to see how realistic 3D environments can be made using head-tracking.

    Head tracking - is where hardware is used to detect the person's head relative to the display. Tracking the head - lets the software know where the user is looking and hence can change the display - thereby giving the user a 3D view into a 2D display. Check out the video and it will all make sense!

     

     

    link to Johnny Lee's web page: http://www.cs.cmu.edu/~johnny/projects/wii/

    link to Johnny Lee's blog: http://procrastineering.blogspot.com/

    Sunday, December 30, 2007

    The Best Internet Speed Testing Web Site

    About every couple of months I run a speed test on my broad-band connection to make sure that everything is running properly and my ISP is providing an adequate level of service.

    I never had one web site that I would always go to - to do a speed test. Typically I would do a Google search for "online Internet speed test" and find one that seemed to be doing an adequate job.

    Today, I came across SpeedTest.net and I must say that I really like the site and it will become part of my arsenal of tools.

    speedTest

    SpeedTest has one of the best interfaces for a speed tester. In addition it stores information about your last tests as well as allows you to compare your results with other ISPs and rate your own ISP. For those who might be interested, there is one version of SpeedTest that you can include on your web-site and another version that allows you to rebrand SpeedTest for commercial purposes.

    Speedtest.net - The Global Broadband Speed Test

    Friday, December 28, 2007

    Cocomo II Application for Software Cost Estimation (C.A.S.E) by Dr. Joel Henry - Handango Pocket PC Software

    splash 

    What now to me seems like eons back I was part of a team that released the first software cost estimation tool based on COCOMO for the hand-held. It was called C.A.S.E (as it was a computer aided software estimation tool as well as CoCoMo II Application for Software Cost Estimation).

    As the software was developed as part of a software engineering course that I took under Dr. Joel Henry we branded the software under the University of Montana logo.

    The software is still available for purchase from Handango: Cocomo II Application for Software Cost Estimation (C.A.S.E) by Dr. Joel Henry - Handango Pocket PC Software

    The application was written in what was called eMbedded Visual Basic a pre-cursor to the now mature development tools for the PocketPC platform. This version had almost no concept of encapsulation and object oriented development and hence we had to come up with some weird implementation mechanisms that allowed us to leverage OO concepts (one of which was to create separate forms - each form representing one class). Some day when I have the time - I would like to see what it would take to port the code over to .NET CF.

    Twenty Three and a Half Rules of Thumb

    Jim McCarthy was the leader of the C++ team at Microsoft. In his role as a lead he wrote the now famous "21 rules of thumb for shipping great software on time". Jim now runs his own software consulting group and you can find a revision of those rules as a series of podcasts called Twenty Three and a Half Rules of Thumb.

    I first came across these rules in a software engineering class that I took at the University of Montana under Dr. Joel Henry. The ones about shipping on time I think are some of the most important and useful rules of thumbs.1781315

    Here are the original 21 rules:

    (also available in this book: Dynamics of Software Development: Don't Flip the Bozo Bit and 53 More Rules for Delivering Great Software on Time)

    21 Rules of Thumb for Shipping Great Software on Time (Jim McCarthy, Microsoft Corporation)

    Shipping great software on time is a difficult but not impossible task. Elements you think would count the most count for very little. Development methodology, process, technical prowess, excellence of tools and depth of project management skills all influence the outcome of a software development project; but nothing indicates success as much as the manager’s ability to focus on a few critical and conceptually simple things. These things can be expressed as rules of thumb.

    I enumerate twenty-one of these rules of thumb. Pick a handful (or so), apply them, and your project will be more likely to succeed. I lump them into three groups: "Shipping," "Great Software," "On Time". Duh. I cover them in a different order, because the concepts build a bit.

     

    On Time

    1. Don’t know what you don’t know.

    It is essential not to profess to know, or seem to know, or accept that someone else knows, that which is unknown. Almost without exception, the things that end up coming back to haunt you are things you pretended to understand but didn’t early on. At virtually every stage of even the most successful software projects, there are large numbers of very important things that are unknown. It is acceptable, even mandatory, to clearly articulate your ignorance, so that no one misunderstands the corporate state of unknowingness. If you do not disseminate this "lucid ignorance," disaster will surely befall you.

    Human nature is such that we dislike not knowing things that are important to our well being. Since there is so much we don’t know in a software project, the nearly universal tendency among developers and their managers is to gloss over or even deny altogether the extent of their ignorance. You should reward and treasure those who consistently make themselves aware of the list of relevant things that are currently unknown. It requires mental and psychological strength to resist the normal human cravings for certainty and order. It especially difficult to believe in uncertainty when things have a veneer of orderliness, which is often the case. Pseudo-order is a maladapted defense against uncertainty.

    The organization surrounding you will undoubtedly abhor uncertainty, would infinitely prefer pseudo-order and will make countless attempts to magically convert your ignorance to knowledge. Your job is to make uncertainty an unshakable fact, and to coerce the reshaping of the surrounding organization to cope with the uncertain situation. The organization must learn to thrive in an uncertain environment for its own well being.

    You should expend a great deal of effort making sure that all the people on the project are aware of their ignorance rather than naively converting it to falsehoods. Bear down on them until they realize they haven’t comprehensively assessed the unknowns. In the successful project, this is much easier in the early stages, or during times of change. This is no time for niceties. People ultimately prefer success even if disillusionment is a prerequisite.

    2. Get to a known state and stay there.

    The function of QA is to know (and articulate) the quality of the product at all times in the development cycle. This should be achieved by abbreviated, repeatable tests conducted daily, and full product sweeps conducted weekly or biweekly.

    It is not properly the job of QA to determine when a product is ready to ship; rather, the moment of shipworthiness in a product development cycle is evident to everyone involved, and is non controversial. This is because shipping has been the goal of the entire effort. Crossing the finish line, while it has intangible emotional and definite financial rewards, is no surprise when you’ve observed every single painful step toward it.

    The only reason you’ve been able to make these micro-observations is because you got to a known state and stayed there, and your QA is how you did it.

    Achieving a relatively accurate view into product status is a very challenging goal, requiring a highly motivated and competent QA team. It is also a pre-requisite for success. Many software development organizations have rudimentary or no real QA assets, and there is little that can be done for them until they make the appropriate investments in creating a modern development organization.

    A known state consists of all components having accurate status information at a given point in time. You know that it’s accurate because the status has been tested by QA.

    A developer articulating the status of his/her component is an exercise that does produce information, but if it happens to communicate the component’s status, it is only coincidental. This is someone else’s job.

    Status should consist of a comprehensive listing of tested and missing functionality, bug count sorted by severity, bug arrival rate, bug fix rate, projected total bug count, and other vital metrics.

    3. Remember the triangle.

    There are only three things that you are working with as a development manager: resources (people and money), features and the schedule. Changing one has an impact on at least one other axis, usually two. It is a simple enough matter to mentally run through the sides of the triangle, or force others to do so, when discussing any part of it. Since the people, the product or the schedule is almost always what you’re discussing, this means that you must constantly envision the triangle. This leads to the most fruitful line of thought.

    4. Don’t go dark.

    Some features have long development lead times, months or even years. Yet slips usually happen a little bit every day, and must be compensated for a little every day. This means that the granularity of development tasks must be such that deliverables are achieved at intervals sufficiently small that slips can be compensated for. A week is a long time to go without knowing what is happening. While micromanaging is always a danger, and will certainly be an accusation leveled against you from time to time, if the goal of the project is to ship great software on time, and if everybody accepts that goal as uppermost, they generally enjoy the chase. Team interdependency is also a powerful motivational force.

    5. Use zero defect (ZD) milestones.

    Organize the project around the concept a reaching milestones with zero defects. Zero defects does not mean that the product does not have bugs, or missing functionality; it means that the product achieves the quality level that had been set for that milestone. The product is tested to that effect. The essential point of ZD milestones is that nobody makes the milestone until everybody does, and nobody leaves it until everybody does. This enables the team to discover what aspects of the project are in trouble. Load balancing can occur. Awareness of unknowns rises.

    At a milestone, the team and its leadership also have the opportunity to perceive the whole project status simultaneously, to draw conclusions about erroneous practices, to remedy bad design decisions and to reorganize for peak performance. Shipping is just the final milestone. Though the external organization cares most about shipping, which adds special pressure to that milestone, the team develops extraordinary focus and introspection about each and every milestone.

    6. Beware of a guy in a room.

    This is really just a special case of "Don’t go dark." Specialist developers who lock themselves away in a room, going dark for long stretches, are anathema to shipping great software on time. Without regard to their individual brilliance, before investing a developer with a significant assignment, it is essential that they understand and agree with the type of development program you intend to run. They must be capable of performing on a team, making their work visible in modest increments and subjecting it to scrutiny as it matures. Some people find this intolerable, and though there is a role for people of this disposition in the software world, it is not as part of a team devoted to shipping great software on time.

    There are many pathologies at play here as well as certain healthy patterns of creative behavior. One pathology is a type of savior complex that cannot be satisfied without blowing every single deadline but the last, and then emerging victoriously with a brilliant piece of work five minutes late. A more healthy pattern is that of the true innovator who is truly designing something great, but who has no personal resources left over for anything but the work at hand. Every ounce of psychological, emotional and intellectual energy is being consumed in the work itself. Teamwork, in this case, is an insignificant factor to a person immersed in this sort of creative experience.

    But whether or not the cause is healthy or bogus, the results are uniformly fatal to the professional development organization. Beware. Extricating yourself from this trap is nearly impossible.

    7. Never trade a bad date for an equally bad date

    Generally, you know you’re going to be late before you know when you’re going to be done. Further, everybody on the team and everybody they come in contact with knows you’re not going to hit the schedule. The pressure to reset the end-date (or the milestone date) is enormous. Even though your information is obviously better now than when you originally set your goal, it is probably insufficient to make a new schedule. This is because with each slip, you and your team are spending your credibility. It is essential that after a slip, the next milestone be hit. This is so the team believes in their ability to manage the project, and so that the reserves of credibility are rebuilt for later consumption.

    It is difficult to say precisely and in all cases when you should "officially" slip. A good general rule is that the schedule should be reset when the total extent of the slip is known for each component, the causes of the slip are understood, and remedies are in place. Usually, this takes the effort of the entire team and its leadership, and must be an explicit, focused activity. After this level of work is achieved, create a new, closer and more conservative milestone which the team is very likely to hit, and promulgate that. Avoid just sliding the schedule out. Your near-in milestone should be extremely realistic, and uncertainties about later milestones will remain and should be highlighted.

    8. When slipping, don't fall.

    Slipping is what happens when information that was unknown becomes less unknown. Though slipping is widely perceived to be a "bad" thing, it is the symptom of a good thing, as a fever is the sign of the body’s immune system at work. Although it is undesirable to have so many unknowns that slippage occurs, it is not an unusual situation, and may even be the norm. This is because much of contemporary software development is essentially experimental, i.e., new platforms, new operating systems, new programming technologies often coalesce on new programming projects to create a high degree of uncertainty.

    In order to avoid calamity, certain measures should be undertaken in connection with a slip. Ideally, one or more of the pre-identified unknowns caused the slip. It is important that everybody involved understand that the risk to the schedule had been known previously. Alternatively, it is essential to understand how the unknown/s had come to be overlooked. How this gap occurred should become part of the group knowledge for future success. Also, determine whether or not people are working on the correct things. Often, slips occur because members of the team become occupied with features of marginal consequence, or features that are not part of the core product message.

    If the slip was a surprise, your communications system is broken, and dramatic communications efforts are required. Large amounts of detail must be brought to the surface for everybody on the team to see. Assess the reality of all current near-term estimates. Expose denial. Team defensiveness will have to be pushed back for the purposes of group learning. Slips reveal your team’s weaknesses, presenting a good opportunity for insightful management and mentoring. Make sure that each individual who has a role in the slip receives the needed guidance and support.

    Slips are also an opportunity to re-evaluate the feature content and resource loads, generally with an eye toward decreasing the features and shoring up weaker areas on the team.

    A good slip should be a net positive.

    9. Low tech is good.

    A smaller effort is almost always more desirable than a larger one. Shipping great software on time requires that we value an understood solution much higher than one fraught with unknowns. Keep in mind that customers would almost always rather see progress than promises.

    10. Design time at design time.

    The product will ship when the design can be shown to be implemented. Developers and their managers often ignore the exigencies of time when creating a design. Instead, they should consider the implementation time as a critical design element. When evaluating alternative design decisions, the one that takes longer to implement is consuming more time and should therefore be disadvantaged in comparison to the alternative. This must always be weighed. Often, when appropriate design value is awarded to timeliness, implementation time can be substantially compressed.

    11. If you build it, it will ship.

    Conversely, if you don't, it won't. The product should be built every day, along with all setup scripts and on-line help, in a public place, where QA can conduct appropriate assessment of daily status, and the entire team can observe progress or its lack. This is the single biggest indicator that a team is functional and a product being developed.

    12. Portability is for canoes.

    And system software. Even discounting the added development burden, with the addition of each additional platform the job of QA increases substantially. While clever QA management can minimize the burden somewhat, the complexity of multi-platform support is beyond the reach of most development organizations. Place your bets. Demand multi-platform support from your system software vendor, then build your product on the absolute fewest number of platforms possible.

     

    Great Software

    13. Enrapture the customers.

    Most software is a renewal business. Customers buy multiple releases over a relatively long period of time. As a consequence, the market has a deep understanding of your software and its flaws, and your organization and its flaws. Often, the market has grown uncomfortably dependent on software that doesn't meet its needs. In many software situations, customers spend hours per/day uncomfortably shoe-horning their lives into your product. As a consequence, they crave your understanding, and will respond enthusiastically to the least sign of it. Normal success, meeting customer expectations, means to improve the most outrageous and flagrant violations of their needs from version to version. They will likely stay with you if you are faithful about that, though they may well be sullen if not mutinous.

    Great software, however, requires that you pivot your entire technology so that it flows in the direction of their deepest needs. You must innovate in ways that clearly affirm their inarticulate desires. Surprise them by articulating and resolving in your product concerns and fantasies that heretofore had been rumbling about only in their pre-conscious. The fantasies of the market are generally centered on issues of empowerment, control and security. The market wants to be able to do things with its computers that it currently can't. Customers often find they can't even publicly admit these needs for fear of computer illiteracy. They derive value and security from being able to apply your software. To admit that they can't do what they want to do requires a sense of security beyond most customers’ reach.

    Market understanding is the foundation of great software. To repeatedly demonstrate through a series of two or three releases that you genuinely understand the market will result in enormous customer loyalty and brand equity. You will be viewed as the source of the market's empowerment. They will be rapturous.

    Gaining this understanding and embodying it in your software requires skill, tenacity and creativity. You must recognize the central market need and organize all your technology and communications efforts in the direction of satisfying that need. While good listening, careful observation and concept testing will be required for you to identify the correct need, addressing it in your product will have these effects:

    1. It will appeal to the customer's sense of security.
    2. It will extend the customer's control.
    3. It will be such that if all else were dropped from your product, but the central need was met in unique ways, the product would be compelling.
    4. It will clarify your product messages.
    5. It will simplify your product's use.
    14. Remember one thing: Unity.

    Unity is the master principle of great software. Each element in the product is necessary to the value of the whole and all necessary elements are there. Since everything you need is there, you aren't tempted to go beyond the present experience, and since nothing is there that isn't required, your absorption into the world of the product will not be disturbed. Unity of purpose and unity in execution should be the hallmark of your team. Unity is achieved in a product by following certain creative principles (#15-#19, below), whether intuitively or consciously.

    15. State your theme.

    Theme is the dominant idea that constitutes the basis of the design. All of the values of the product must stem from the theme. In order for people to comprehend the theme, it must be rendered with surpassing clarity. Theme is analogous to purpose. The more specific the purpose, the greater the effect. Having a theme to the product will require that you eliminate or at least minimize orthogonal values. This is painful and involves risk.

    16. Vary it.

    Variation is the theme restated and elaborated in slightly altered and embroidered ways. Variation is the means by which we intensify the user's comprehension and appreciation of our theme, and leverage his/her growing consciousness in new ways.

    17. Balance it.

    Allocate appropriate emphasis among the various elements of the product. If a key component supporting the theme, encountered every time the thematic function is enacted, is weak, the theme is weakly stated and the product will be justly criticized.

    18. Evolve it.

    Evolution is when earlier parts determine later parts. Lessons learned in one part of the product apply to the others. Things progress in a way that is pleasing. Outcomes, if not predictable, are satisfying because the product foreshadows them in countless ways.

    19. Your product should be a hierarchy.

    Hierarchy is when the elements of the product gain attention in proportion to their importance. Closely related to the property of balance, hierarchy provides a means for establishing and evaluating balance. If the theme is the top of the hierarchy, elements at the next level have balanced value with respect to each other, all equally supporting the thematic function, and so on throughout the rest of the hierarchy.

    20. Establish a shared vision.

    It seems absurd to even have to state this, yet it is perhaps the most difficult thing of all to achieve. Everybody on the team must know what they are trying to achieve, what the finished product will look like, what the basis of the product strategy is, and when they must deliver it in order for it to have its intended effect. Contradictory visions must be resolved and unified. Harmonious purpose must be achieved, or greatness is out of the question and even shipping becomes infinitely more complicated.

     

    Shipping

    21. Get the team into ship mode.

    There is a moment on every development project when it is ideal for a team to enter ship-mode. Ship mode is a high performance period characterized by efficiency and determination. It is a period of flow. Before a team can enter ship mode, several pre-requisites must be satisfied.

    1. Shipment must be the next milestone.
    2. Everybody (or nearly everybody) must believe that achieving the milestone is possible.
    3. All members of the team must understand precisely what they must do prior to shipping. All unknowns are factored out.
    4. Management must lead the team to ship mode by entering ship mode first. That is, superfluous management hoo-ha is eliminated, the manager’s awareness of detail climbs, fire-drills and other de-prioritizing activities are eliminated entirely and tremendous focus is brought to bear.
    5. The team must desire to ship. Generally, a complete awareness of the effect of shipping (or not shipping) will create desire.

    The team becomes especially vigilant about thinking things through, and looking for traps. Check-ins are made with extra precaution. Stabilization of the product is the principle goal. All development is complete but for bug fixing.

    The endgame, the last stage of shipmode, is different yet again. It is conceptually a very simple exercise. There is a list of activities. When every activity on the list is complete, you ship. Though the list might have hundreds or thousands of items, it is still just a list. There is no time for any effort that does not contribute toward completing the items on the list. Everybody is expected to complete their items as promised. As unanticipated items arise, after appropriate resistance, they are put on the list.

    A daily meeting should be established, with final decision-makers in attendance. Agenda is ad hoc, assembled at the beginning of each meeting. No item is postponed that can be handled now. The team is aware that all issues can be brought to this meeting for expeditious remedy. Management is involved, leading the team toward their goal.

    The goal is an acceptable quality level at ship time. Only showstopper bugs should be addressed at all. Showstoppers are bugs that will either effect more than a handful of users or will cause unacceptably serious errors. Cosmetic changes, performance enhancements, new functions are not appropriate changes. The purpose of beta feedback during this period is to prove there are no showstoppers, provide advance warning of unanticipated market reaction and provide input to the next release.

    Understand the range of quality that is acceptable to your customers. How many low priority bugs did your product ship with last time? Was it a problem? Are the customers better off with this product including this bug? Since destabilizing the software is more of a problem than most bugs, be very careful about which bugs you fix. This is why we have "ReadMe’s" and bug lists.

    Shipmode is basically a succession of daily milestones climaxing with the product’s shipment.