The Biggest Problem With Software Development

In my opinion the number one biggest problem with software development is that programmers concern themselves WAY TOO MUCH with the implementation; when, in fact their "stated" goal is to solve a particular problem.  As such, the implementation technology is not important; whether it be software, pen & paper, mechanical, whatever.

The REAL goal is to come up with the most efficient solution to a general problem.

First and foremost, in order to solve a problem, a person needs to have a very detailed understanding of the problem. This step is often overlooked.

Programmers love to program. Tell a programmer about an idea you have about a product (say, a better way to manage the workflow of a lawyer) and before you've finished your first sentence, he will already be coding away in his head.

Not only is this way of working ignorant, but it is extremely arrogant.  (using the above example, how in the world could a programmer know enough
about the lawyer profession to write a program that runs a lawyer's entire business, after say, only conducting a few days of background research?)

Most programmers are not driven to solve the abstract, general PROBLEM, but are driven to wrangle the complexity of the computer, solving the complex bugs introduced in the process, and managing the other endless minutia.

I think Computer Science should look towards other, more established professions like Architecture.  I haven't done much research on the subject, but I know that Architects spend a LARGE proportion of their project developing the blueprints, working out the fine details, getting them to pass endless codes (fire code, safety code, etc.).  ONLY THEN, once the blueprints have been hammered, does construction begin.  THEN, even after all that, the construction process is a difficult enough profession that workers will have interesting problems to work out! (similarly, Programmers can't cry and say "hey - that's what we're for!" Believe me, there is a lot of detailed, cryptic, hard work to do EVEN IF a programmer is handed excellent Product Specifications).

Conflict in HCI Field: Computer Science vs. Psychology

Recently, I have become obsessed with what I feel is a huge conflict in the HCI field between the role of Computer Science and the role of Psychology. Most HCI courses, programs, or research I run into involve coming up with newer, novel, and more "effective" software strategies. Usability Tests are conducted in order to test the effectiveness of one particular strategy vs. another (Example, Browser-based interface vs. Native Windows Interface).

Although these things are important, I feel that the REAL issue at hand is largely being ignored. THE BOTTOM LINE: The purpose of technology is to make life easier. More specifically, to simplify a particular task or set of tasks.

As such, software is not very interesting. It is merely a tool for accomplishing the goal; a tool for IMPLEMENTING the goal. What's more, history has shown as that the tools we use for accomplishing our goals constantly change, and of course, they will continue to do so.

So, what is REALLY interesting, and what is REALLY important, is discovering (or should I say, "working towards") the IDEAL way to accomplish our goals. FORGET ABOUT THE IMPLEMENTATION!  It is absolutely SECONDARY!  It should be of no interest to us; what's more, we should make a conscious effort to completely block it, and it's inherent set of limitations, out of our mind.

Only later, after we have meticulously (and with solid engineering methodology) beaten the hell out of our IDEAL solution, and tested it using all known human ways and means, should we even think about adapting our IDEAL solution to the constraints of the implementation (which, in our case, is usually software).

SO, exactly HERE is where I see the conflict between Computer Science and Psychology in the field of HCI.

Computer Science focuses way, way, way too much on the implementation!

Computer Science students who take HCI courses, or even Computer Science PROFESSORS who teach HCI courses, LIVE in the world of software. Their brains are immersed in the idea of software. When they are asked to develop a program, they start off in the world of software and try to make their way into ADAPTING the WORK DOMAIN (the set of tasks they are trying to simplify or automate) INTO their world of SOFTWARE.

Psychology students and professors work precisely in the opposite direction. Their brains are immersed in the idea of understanding human behavior and thoughts. As such, they start off with a solid conceptual model of the WORK DOMAIN, and try to make their way into the world of SOFTWARE.

So, in brief:
Computer Science moves from Software --> Work Domain.
Psychology moves from Work Domain --> Software.

Clearly, the field of Psychology takes the correct and logical approach, while the field of Computer Science does not. The fact that poor requirements analysis is the primary reason why most software projects FAIL, serves to prove this point.

HCI is unfairly weighted into the realm of Computer Science.  Instead, it should be leaning more towards the world of Psychology.

Computer Science students do not know what HCI really means. Their curriculum and professors push them towards the process of "coding." The ongoing "crisis" of consistent failures in the software industry will continue until computer science professionals stop thinking, myopically, in terms of software all of the time.

What we need are Software Engineers, whose first and foremost goals and obligations are to understand the dynamics of the work domain.

Secondly (and less importantly) they must know enough about the different implementation strategies in this world in order to make good decisions.

Idea: Questionable Sales Tactic

Given a person's first, last, or first & last name as an input, spit out the "likelihood" of the origin of their name.


Name: Ginter Trybus

German - 64%
Austrian - 28%
Russian - 5%
Swedish - 2%
Other - 1%

Could be very useful for salespeople, for which finding an intimate connection with a sales prospect could spark a meaningful conversation, which, in turn, could result in closing a sale.

It would be a good idea to research the most important or most useful "things" to know about a person (either explicit or general) in order to close a sale.

Possibly a way to learn more would be to sit and listen to a salesperson at work, and actively monitor his discussion with the prospects. What things does he say? How do the things he says affect the conversation?  Focus, specifically, on those conversations that lead to the closing of a sale.  What happened in these cases?

These other "things" could be implemented separately, so, what you would get, in the end, is a set of tools that would allow you to GUESS some DETAILED information about a person given some GENERAL information about them, such as name, age, sex, etc.

These tools could run in real time as the general information is inputted, and those results that are most relevant could be displayed, for example, as a sidebar on the screen.

SO, for example, a potential customer phones a company, say, ACME, Inc. for information about ACME's new product. The salesperson offers to send the customer marketing materials for the product. The customer accepts the offer, and the salesperson records the name and address of the customer, "Nima Bakhtiary", 1234 Anywhere St., etc.

CASUALLY, the salesperson says, "Ahh, that is an interesting name. Does it happen to be Iranian?"

Customer says, "well actually, it is."

Salesperson says "I thought so, [INSERT BULL%&*#, such as: 'a former colleague of mine was Iranian - a real great guy, he's one of the most brilliant people I worked with. .. .']

IF IT CLOSES MORE SALES: (most people would say:) WHO CARES.

ASSUMING that such a suggestion is not offensive (which may be, for example if you ask a Greek person if his name is Turkish, or, if you ask an Israeli if his name is Palestinian), then this could lead to a useful discussion (in terms of creating a relationship and closing a sale).

Jupiter Communications: "Interactive" and "Rich" Web Interfaces

Jupiter Communications recently issued a press release discussing the need for more “Interactive” and “Rich” web interfaces:

I definitely agree with their general statement, however, current technologies (Java, Flash, etc.) are geared more as a replacement to the commonplace HTML interface;  as such, they introduce (an entirely new and non-standard) interface and navigation paradigm which by nature counteracts any potential increase in usability.  These new interfaces create a steep learning curve – which is completely unacceptable on the web.  Users will simply choose a site they are more comfortable with.

Also, it should be noted that the Jupiter press release explains that users demand a more interactive interface.  Users say they would use features such as zooming and virtual dressing rooms.  Jupiter is asking users to make decisions as to how they would like a site to be implemented – which I believe is the wrong approach.  It should be the role of the designers to decide how a site should be implemented – and the designers should make this decision based on learning as much as humanly possible about what the users want to get done.

Jupiter’s approach is equivalent to some average Joe telling an architect EXACTLY how he would like his house designed – Tile floors that are heated 24 hours a day, A living room with a TV that is built into the wall, and a bedroom with a 100 foot high ceiling that has a pool above it.  This average Joe is DEFINITELY not in the position to make these detailed design decisions, as he has absolutely no idea about the underlying technicalities: heating the tiles would cost a tremendous amount of money and may cause the tiles to crack, building the TV into the wall would make it an absolute pain to replace the TV or add/remove devices such as VCR’s, and a 100 foot high ceiling could only support pool with the use of huge steel beams in the center of the bedroom.

Jupiter’s press release should not serve as a literal explanation of what needs to be done, but as an indicator that users are unhappy and want an interface that better satisfies their needs.  HOW that interface should be developed should be decided by designers who focus on what the users want to get done.

Short Analysis: Online Tutoring

I feel that online tutoring idea has HUGE potential and that it is an untapped market, although I still have some problems with the idea.  I’ve been thinking about the advantages/disadvantages of online tutoring vs. real-life tutoring...

ADVANTAGE: The online tutoring idea allows for a lower transaction cost (figuratively, not literally) than real-life tutoring.

It would be much “easier” to go online for tutoring.  People would not actually have to get up and go to a physical location.  But, the main advantage I see here is the social aspect.  Many people have a hard time meeting others and communicating.  People use external devices to help them feel more secure about themselves.  Bars (alcohol) and online chat rooms (anonymity) are testament to this fact.  I think, in many cases, a person’s insecurities hold them back from using real-life tutoring.  Many people who need or are told that they need tutoring are already insecure about themselves to begin with!  They may feel “dumb,” “slow,” what have you...
The fact that online-tutoring is much more anonymous is a huge advantage.

DISADVANTAGE: Person to Person communication with people is VERY limited online.

Currently, our technology limits us to very simple means of communication: text, images, virtual “whiteboards,” etc.  The richer means of communication are waiting on the heels of technology.  In real-life, person to person communication is MUCH richer.  Obviously, being tutored step-by-step through a complicated calculus problem would be MUCH easier in real life: hand gestures, voice (tone of voice IMPORTANT), free-hand writing (look at the math newsgroups to see how, using the limited characters (tools) they have, they express math problems).

This online-tutoring idea NEEDS to leverage the value of the network. I don’t see how this will be achieved.  One idea is to have a LIMITED BACK-END POOL of people. These people will be the paid “tutors,” helping out the students. This limitation exists in real-life as well.  If I want to be tutored at UCLA, I’m limited to those UCLA students who choose to be tutors.  Now, of course we’re talking the Internet, and the LIMITED BACK-END POOL can be MUCH BIGGER (thousands of people from all over the world) and it can be MUCH MORE DIVERSE, but this limitation still exists.  Ideally, this LIMITED BACK-END POOL would grow in proportion with demand for tutoring.

The biggest challenge I see in all of this, which, in my opinion, should be the FUNDAMENTAL advantage of online-tutoring is the “matching up” of problems and solutions.  Ideally, if you have a problem, or need help with something, you would be helped instantly by an expert in the topic whom you can easily communicate with.  So, let’s assume we have a diverse BACK-END POOL of people.  A student has a problem.  How do we determine who the most “qualified” tutor is for a student?  What if a student is matched up with someone whom with they just can’t learn?  What if another tutor is just plain and simply more “qualified” than a tutor that is currently serving a student?  These problems exist in real-life, however they would be even bigger online.  Online, the tutors would have much less knowledge of each other and each other's skills (unlike, for example, in a real-life tutoring center where the tutors can interact and communicate on a daily basis, and learn who is best suited for each task).

One idea would be to make the tutoring effort more collaborative, not simply a 1 to 1 ratio between students and tutors.  Let’s assume a student has a difficult geometry problem.  He “posts” in a public, globally viewable place, his problem.  Immediately, he is helped by the most qualified person. Tutors, having the ability to view “pending” problems they are interested in, can “join-in” the tutoring effort, and provide help if it is necessary.

Now, this idea clashes with the LIMITED BACK-END POOL model.  However, maybe we can remove the LIMIT on the BACK-END by allowing anyone in the world to instantly become a “tutor.”  We could have “CERTIFIED” tutors (who are PAID for their work), and then just “CONTRIBUTORS” (who work on free will).

This idea would be REALLY harness the power of the Internet.  Like newsgroups, there would be absolutely NO LIMIT on the BACK-END.  However, unlike newsgroups, it could be organized, moderated, and real-time.  Now thinking about it, I used to see it (and be part of it) on America Online (back in the days..)! AOL has a chat area where members can go if they have problems/questions.  Each chat room is run/partially-moderated by a PAID AOL support staff member.  AOL Members who join the chat room wait “in line” to be served by the AOL staff members.  Because AOL was not capable, in certain situations, to support all of its members, some chat rooms did not have AOL support staff members.  As a result, smart, experienced members would help each other.

Now thinking about this, I have a model in my head how this could all be put together.  I see a web server primarily used to display “pending” problems (that students have).  This information would be categorized, by subject, and of course, searchable.  All “tutoring” could be done peer-to-peer, meaning that no real-load would be put on a SERVER (very decentralized).  The real question is the environment in which the student and tutor will communicate.  Ideally, they could use any internet-capable appliance in the world to communicate, so having the application non web-based (like ICQ) would not be good.  However, making the application web-based would pose some real limitations as far as expandability. Maybe a Java app would be an option.  Whatever model it is developed on, it should inherently lend itself to change in communications technology (video, voice, etc).

Server Side Data and Networked Clients

Data on the server side is the future.

Ideally, the user would have a complete data environment that is accessible by various means by various devices.

Imagine that you could log in from any Internet capable appliance and access your data. Work with your programs.

Why, for example, do you need to lug around your Compact Discs from your home to your car and back?  When you purchase music, it should be stored digitally on some server somewhere so that your car stereo, your walkman, your computer, and your home stereo system could easily access it.

All commonly used devices that revolve around the use or storage of data will rely on the network for data storage and retrieval. This includes walkmans (music), cell phones (phone book), cordless phones (phone book), computers (documents, spreadsheets, and other application data), TV's (as vcr-replacements for movies).

Imagine the potential growth in revenue for the movie rental business:

First of all, why do you need a Blockbuster store in order to find a good movie to rent?  All you do at the store is read the movie titles, look at the pictures on the box, and read the summary. So...get rid of the store. Replace it with a smart, searchable, interactive online catalog with movie previews, etc.

Second of all, why do you need to manufacture video tapes?  The movie can be distributed to you blockbuster account via the network.  Get rid of the distribution costs.  No more video tapes.  No more trying to calculate the popularity of a movie in order to produce and distribute the "right number" of tapes.  If 800,000 people want Jurassic Park, they will get it.  If 1 person wants a small, no-namer B-Film, they will get it.  Blockbuster could perfectly supply the demand of its customers!  How incredibly efficient; analog companies that build and distribute physical devices (Sony, HP, Honda, Kenmore) can only dream of achieving this!

Applications will be on the server side, but in what form?

The benefits of an application being on the server side are distribution and maintenance. Installations and updates would not have to be done on a company's 2000 workstations. The applications would just be accessed by each workstation. Also, the application provider could log and analyze all user activity with the application. This could result in huge improvements in the design (and therefore, the usability) of applications (Yeah!).

Technologies such as JAVA were developed to achieve this goal.

Approaches to outsourcing access to applications like Microsoft Office via a web-browser are very mickey-moused. Applications such as Office were developed to run on the desktop. They were developed to run on some flavor of Windows. These implementations of Windows-apps gone Server Side will be very inefficient and extremely not user friendly. Office running in a Web Browser!? Give me a break!? Tell me, for example, what does the BACK button (on the browser) do?

Some "Browser" (meaning a tool that allows certain programs to run) needs to be developed without any "standard navigation" (like BACK, FORWARD, HyperLink, etc). It should only allow maintenance of its environment- like moving screens around, etc.

Of course, this sounds very familiar (MS Windows!).

Web Browser as an OS; SAP client as a web "site"?

The navigation of a web browser (URL line, back, forward, hyperlinks, bookmarks, etc.) allows a user to access a particular web page on a particular logical "site." This navigation is built-in to the web browser and, for the most part, cannot be changed; it is constant.

Every site employs its own means of navigating within the site. For example, many sites list "site categories" on the left side, such as "Products," "Support," etc. This means of navigation varies from site to site; it is dynamic.

Looking at a web browser and a "site" in this respect, is a web browser not unlike an Operating System? Is a "site" not unlike an application?

Windows 95 is an operating system. It provides the environment in which Windows-based apps "live." A web browser provides the environment in which Web-based apps live.

Now, there are huge differences between the environment that Windows 95 provides, and the environment that a web-browser provides. Windows 95 allows for much richer human-computer interaction. Applications written for a Windows 95 environment can respond to user actions in (from the user's perspective) real time. Web-based applications inherently require the user to "submit" information, which is processed by a server, which is then responded to by the server. Windows-based apps can display a "grid" on the screen that can be sorted by clicking on a particular column. Web-based applications require a page to be completely re-loaded every time a list of items is sorted. Windows-based apps can support dragging & dropping of information… . etc. etc..

Over time, it seems that the Web browsers are, however, becoming a more interactive environment. Client-side JavaScript, client-side VB-script, and Java applets are testament to this fact. If this trend continues then Web Browsers will provide an environment increasingly similar to the environment that Windows 95 provides. Dragging and dropping, "live" interaction, etc. will be made possible.

This raises a bunch of questions:

  • How will this more-interactive environment be made possible? Will HTML embrace all kinds of "smarter" controls, like "Grids," and become a GUI development environment, like Visual Basic?
  • Will technologies like JAVA beat-out HTML because of their inherent interactive-ness? (while still providing the web's server-centric advantages).
  • More and more applications are being developed for the web. Once standard client/server Windows-based apps are being made accessible by a web browser. Is a web browser's navigation paradigm (back, forward, hyperlink's, etc.) suitable for these apps? (for example, let's say an accounting package). Wasn't the Web Browser's navigation paradigm designed for navigating through hypertext (just text and links)?

Short Analysis: Wireless Data Access

Market Status

Much utility could be gained from allowing all types of information and services to be accessible via wireless devices;  the same type of information that is accessible via the web, for example: corporate data, banking, stocks, flight info, e-mail, news, calendar, maps/directions, instant messaging, multiplayer games, etc.

When talking about Wireless Devices, we're really talking about a wide range of tools:  cell-phones (Nokia, Motorola, etc.), PDA's (Palm, WinCE, Psion, etc.), and Pagers.


Currently, cell-phones have very limited data bandwidth, practical only for text-based communication.  Richer multimedia is waiting on the heels of "3G," the third-generation high-speed network.  The majority of cell-phone innovation is taking place in Europe, where a very high percentage of most populations have one.

The two most prominent platforms for data communication on cell-pones are SMS (simple message service) and WAP (wireless application protocol).  SMS allows for only very rudimentary communication; it only allows for short text messages to be sent from one SMS device to another.  WAP, however, is a complete operating environment for wireless applications.  Ideally, a person could browse the web on their cell-phone with a standard HTML-based browser.  However, because of the fact that a cell-phone's user interface (the very small screen, the limited data input capabilities, etc.) is so drastically different from a desktop PC, WAP emerged.

WAP relies on WML (Wireless Markup Language) which is an implementation of the XML standardized specifically for use on wireless devices.  WML is very similar to HTML, as they are both markup languages, however they have slight differences to accommodate for the cell-phone's limited interface:   WML uses a "Card Metaphor," where user interactions and navigations are split into "cards" (think "page").  A collection of cards are called a "deck" (think "site").  WML also makes use of WMLScript,  a scripting language derived from JavaScript.  WAP also includes an API for telephony operations (make calls, etc.) and utilizes standard formats for Business Cards, Calendar, Images, etc.

More information regarding the WAP standard can be found at: (details of WML comes in at about slide # 11)


This market consists of two different types of machines: PC Accessories (extension of the PC; like Palm, Visor, etc.) and Handheld PC's (roughly PC-equivalent, like most Windows CE machines; Cassiopia, Velo, Psion, etc.).

Wireless communications for these PDA's include the Palm VII with its built in modem and data service, and various wireless modems for the Palm III, Palm V, and WinCE devices.


One-way communication on paging devices has been around for quite some time, however, new paging devices are allowing two way information.


Here are a list of just some problems with these wireless data devices (of which successful companies will solve):

Privacy - Privacy becomes an increasingly bigger problem as, via these products, people and data will become more and more accessible.  Time management becomes even a bigger issue than it has previously been, as people will struggle balancing work and home life.  Some people claim ubiquitous access will allow them to work more efficiently, therefore creating more free time.  Others feel that it will allow work to encumber upon home life, driving up work expectations to get things done quickly.

Software Usability - like HTML, user interaction with these devices are not in real-time, and are therefore very poor.  Also, data input with these devices are very poor, and are limited to using tiny keyboards, on-screen keyboards, numeric keypads, and special pen-based languages.  Voice input and "Predictive Text Input" (where a dictionary tries to guess and complete the word a person is keying-in) are steps in solving the problem.  Many feel that voice-input naturally lends itself to wireless devices, voice being the inherent unbound communication tool for humans.

Software Portability - HTML introduced a very simple way to distribute applications, where a client device (a PC) simply "accesses" and uses software located on the server.  These wireless devices are following the same trend, however, the differences in these client devices (Phone, PDA, wristwatch) are far more extreme.  Tools that allow developers to easily port software efforts from one platform to another platform are essential.

Data Portability - Before having access to the network, most wireless devices "synchronized" with software in order to maintain data integrity.  This was due to the fact that there were two or more software packages (usually from different vendors with dissimilar interfaces) each with its own way of storing its data.  As applications become more "portable" (as described above) the need for multiple software packages with multiple data stores will decrease.  Data will be stored on one server and will be "accessed" by a myriad of different devices.  (See "Server Side Data and Networked Clients").

Interesting  Companies (formerly Unwired Planet,

Providers of software and services that allow for internet applications to be available via cell-phones.  They currently have the most mature WAP browser available.  Recently acquired @Motion, a company bringing voice-recognition technology to cell-phones.

GoAmerica (

Provider of web and e-mail access via RIM850 Pager (  GoAmerica's web browser is pure-text, and shows a web page without images.  Service is highly regarded among small group of users.  GoAmerica allows for unlimited free use while using their software and charges $0.20 per packet when using other software. (

Site created by Starfish Software that allows data to be inputted on one device and synchronizes that data with all other devices/services a person uses.  TrueSync is compatible with Motorola clipOn, REX, REX Pro, Palm, Windows CE, Outlook, SideKick, Act.  With a single mouse click, calendars, contacts, notes, and tasks are all synchronized among all devices and services, and data is even accessible on TrueSync's web site.

AvantGo (

Very popular tool for viewing web-based information on wireless devices.  AvantGo outputs data in Palm VII, Windows CE, and WAP format.  Has an AvantGo Enterprise product for making corporate data and applications available remotely.

* SqueezeNet (

Creating wireless web applications that can be accessible via any wireless device.  Partnering with a company called Syvax to create a real-time travel, lodging, and reservations system for wireless devices that is currently patent pending (

* "Page Info" Service (

Service created by one person that allows you to request useful information via a two-way pager or SMS phone.  Information includes flight info, weather, stocks, etc.  Service uses a simple, command driven language; commands such as "FLIGHT," "WWEATHER," and "STOCK" are entered into the device (along with the parameter(s) for the command) and the information is quickly sent back to you.

WebCab (

Non-profit organization trying to advance technology in wireless communications.  Allows a person to access POP3 e-mail account via WAP capable device.

ProxiNet (

Creators web browser for Palm OS, named ProxiWeb.  Company's goal is to allow internet information to be accessible on any device using any network.  The group that created this software is the same group that created Inktomi.  Browser uses ProxiWare; an intermediary piece of software that "retrieves HTML content from other Web servers, transforms the content, and delivers the reformatted content specifically to handheld devices for rendering by the ProxiWeb client."  This software does not require any effort from individual web sites in order for their site to be accessible via ProxiWeb client.

SmartCode Software (

Creators of web browser for PalmPilot and Palm III called "HandWeb" (however, not as sophistacared as ProxiWeb).  Also developed E-Mail and Faxing tools for Palm OS.

* ZTango (

Creators of platform for allowing data to be accessed via WAP compliant devices.

* Room33 (

Service accessible via web-site or WAP compliant device that allows for messaging (ICQ, SMS, FAX), Calendar, and Contacts.  Also, site has a "Directory" which essentially is a portal to other WAP applications. (NOTE:  This is the only tool I have heard of that allows Instant Messaging to be conducted via WAP!  Also, it is apparent in USENET newsgroups that there is great demand for a Yahoo-like directory of all WAP services that are available.)

Pixo (

VC-backed applications developer for wireless phones.  Created a web browser that natively access HTML.

AU-System (

Large Swedish software and consulting company specializing in communications via both voice and data.  AU-System is highly revered among industry-types, and is a powerhouse regarding WAP.  They developed a WAP browser for the Palm V.

Orange (

Large UK mobile phone company.  Creating a very interesting WindowsCE-based VideoPhone which will be available next year.