CodeBetter.Com
CodeBetter.Com
RSS 2.0 via Feedburner
           Do you Twitter? Follow us @CodeBetter

Ranjan Sakalley

July 2005 - Posts

  • Some VS2005b2 likes and dislikes

    Likes -

    Clean Solution/Project

        Helps out to clean the solution/project output. Cleans out Copy Local assemblies, as well as the compilation output of the project.

    Reference properties - specific version (true/false)

        Very useful if different developer machines have different versions of components (though extremely dangerous if you have not rule out the use of conflicting methods).

    Framework for private method testing

        The framework gets generated as soon as you "Create Tests" for a provate function. Neat pattern used.
            

    Dislikes -


    No default Shortcuts

             No default shortcuts for TestView (though you can go to Tools > Keyboard and add this one), to run a particular test, as in TestDriven.Net plugin, which I have got used to.

        No option to add shortcuts too. Because the IDE does not identify a unit test at design time, just after right-clicking over a part of the Unit test, I dont think there is a VS IDE function, that can be given a shortcut. This is really sad. 
       
            Having used ReSharper for some time now for VS2003, it has become cumbersome to move over from the Eclipse style refactoring to the Ctrl K key set. Not that I want Whidbey to copy them, but because there are less number of refactoring options, it *might* be a better idea to upgrade ReSharper's subscription.

    Anyway, its just Beta2, so we still have time to force a solution to the Keyboard ignorance issue.

    Posted Jul 18 2005, 04:39 PM by rsakalley with 3 comment(s)
    Filed under:
  • Requirements collection for User Interfaces

    End users interact with your software only through the User Interface, and therefore, you must understand that for them the User Interface is the software. Architects, and developers in general forget this, and are predominently concentrating on design patterns, antipatterns, language nuances, tiering and layering, data communication between machines etc. throughout the software development life cycle. Whilst the above mentioned entities are essential towards a good product, User Interface is the most important of all the aspects of a software; this, if you are in the business of selling the software, or providing an end user a convenient solution. Many a time, I forget the actual motive behind writing a software, which invariably is improvement in productivity of the users of the software. User interface forms a very important part of what we are writing the software for. This is the reason why people took Windows over Unix a long time back.

    Essentials for an effective user interface
    An effective user interface helps a user perform a task with the minimum possible effort. To create one, you must understand the user, just like a motion picture director understands the audience, and manipulates their feelings. Following are some aspects of the audience that you must know, before starting to design an effective user interface -

    Individual Technical ability
    Gather information on the computer literacy of the users. Instead of letting them tell you about it, start with a set of questions first, get these questions answered by all possible end users, or if you are developing a product, a trusted sample target audience. I would normally ask atleast the following -

    General questions - questions that would give us some metrics on what is the technical ability of the users
    • Do you like working with machines? Computers?
    • What is your current position in the company, does it involve working with computers?
    • Have you undergone a formal computer training program?
    • Do you think a computer can add/has added to your productivity?
    • Do you have a computer back home?
    • How often do you use a computer? How much time do you spend every day?
    • Please rate yourself from 1-10 on your typing speed/skills?
    • How would you like to classify yourself, as a mouse-user or a keyboard-user?
    • Are you left handed? If yes, do you use a left-handed mouse?
    • What are the the problems you have faced, and currently face when you are working with a computer?
    • Do you like a colourful interface to the software, or a simple classy one?
    • Do you like reading articles on the computer? Do you increase the font sizes when you are reading?
    • Do you feel comfortable with simple menu items with small images, of you would prefer an interface with big image buttons on the screen?
    • Do you get bored of the user interfaces that you use currently? Tell us what actually do you feel is the reason behind it.
    • How often do you use software help manuals, per day?
    • How would you react to a new software given to you?
    • How much time would you prefer to spend on getting trained? Do you think the training time has its worths?

    Once you get the answers to such questions, get some metrics out of them, form small groups of people who you can classify as
    a. People who got bored answering because they know too much.
    b. People who answered the questions positively.
    c. People who answered the questions correctly, and gave you a good picture of what they are looking for.
    d. People who got bored answering because they did not know what you were asking about.
    and many others. If you cannot talk to all of these, find atleast two median users of each such class, and talk to them regarding how they feel about Computer software in general, and what are their basic needs and problems with computer interaction.

    With these questions, you would have a definitive picture about the knowledge, enthusiasm levels and a little information on technical capability of the users, the stress you need to put on keyboard shortcuts and tab-orders etc., the problems that you need to solve for them, specifically in terms of their past experience with user interfaces, and some other questions like would you need to support skins etc. These questions would sometimes give you a picture of what the users expect in terms of Help manuals and training too. A set of 20-30 such questions would really help you getting this knowledge.


    Group technical capabilities - User classifications in the Enterprise scenario
    With a result set of the questions above, you would actually be able to classify users with their job functions in the target organization. I mention this, because most enterprise automation software involve a lot of roles, each separated by the other based on education, aptitude and talent etc. of the employee. And for each such role, their is a separate user interface that you need to design. With the metrics from the last questionnaire, and after the meetings, you might be able to define the traits of each role. Following is a set of roles that you might get, with a healthcare provider organization -

    System Administrators - highly efficient computer users, very enthusiastic in controlling all aspects of your software.

    Nurses - least efficient but highly enthusiastic. Might not know what they want, and hence you have to pitch in extra effort.

    Doctors - normal efficiency, but would like the software to do and be everything, "no clicks" requirements

    Clerks - very efficient, understand computers and have specific requirements. Reporting needs.

    Data entry personnel - good typing skills, keyboard freaks, require perfect data flow.

    Marketing managers - not good with computers as such, but want to use them, requirements run around communications and almost everything you can write reports on.

    Human resource managers - undertand the importance of keeping records, generally require reporting and file storage capabilities.

    Receptionists - efficient typists, prefer a POS like user interface.

    Lab managers - record keeping, communication and integration requirements.

    and so on.

    Divding the audience, into small identifiable groups is one of the best ways to go ahead with user intefraces. It helps in putting concentrated efforts on each module of the UI, right from the time when you start writing proof of concepts. Once you can group the users as a set, and have clear boundaries of each role, you have to start preparing questions for each such role, asking questions designed specifically on their tasks, and how they want the user interface for each task to look like. I am currently reading a book on Paper Prototyping, and its definitely a way to go.

    As a conclusion, I would mention that each end user is unique, and to strive to satisfy every one of the end users is a noble task. One needs to understand the limits to which such customizability can be provided, and these limits cannot be drawn without gathering a comprehensive set of metrics. Whether you go ahead with satisfying each user, or by grouping end users into roles, and then satisying the median of such roles, you must first understand the importance of the User Interface, and then their requirements.









  • Product design and integration

    A few days, a colleague posted some insights on Design Principles here (http://www.proteans.com/CS/Web/blogs/agilerup/archive/2005/07/06/18.aspx). There were very interesting topics, discussed briefly, and one of them was about the emphasis one should have, when designing, on integration. I have had some thoughts on the same too, and here they are, following a little background information.

    What is integration? And where does it come into picture?

     Suppose you create a great accounting package, for SMEs. Its very good, got good performance, great UI, the clerks love it, the ladies go nuts over it, if looks could kill and all that, you know. Now we understand that this is not a killer app, because there are many accounting packages out there in the market, many from big and dependable corporations like MicroSoft, many well established like Quickbooks, and many much simpler than yours. But you have a great Sales and Marketing team that really toils hard, and sells a thousand copies. You will now, definitely face one of the following scenarios, if not all of them -

     1. You Sales and Marketing girl comes back and tells you that most of the people that she talks to about our product, say that they want an accounting package which can take in inputs from their web-site too. Ours doesn’t support that, so they don't even talk about it any further. Then there are people (Prospects) who have some partners out there in business, providers of raw-materials etc., and the partners have, let’s say, QuickBooks installed on their site, and the prospects want to get rid of paperwork, and want the accounting package they buy, to talk directly to their partners' package. So these guys don't talk to the poor (well yes, there are such rare situations, where you can use the word poor as an adjective for Sales people) lady, and she is now getting red at you, for not thinking of such situations when designing the package.

    2.  You identify a liquor store as a major prospect, you visit them personally, try to impress them with your tech-talk and all. But they counter everything with some of their own. You tell them about your package, and they start asking you about how your package would work with their existing infrastructure. They start talking about ESBs, BizTalk and all, and you take your sad face home, thinking what went wrong, where are good old stupid liquor store managers going these days.

    3. One of your clients grows really fast, and is generally happy about the software that you gave him. But now, he needs an Inventory Management solution too. So he buys one, but later finds out that instead of improving his inventory management, installing this new software has increased the paper-work, and along with it, chaos in the office and his staff productivity has decreased to half. He digs deep to find out that this is because of the technical incompatibility between the accounting package you wrote, and the inventory management software he bought. He is in an indecision mode, and during this period, the company that sold him the inventory management software calls him up, and tells him about the new accounting package they are writing, which seamlessly(the regular sales talk, you know) integrates with their other softwares. The client calls to tell you his decision, for him the decision is great, but for you? The story doesn't end here, this guy goes and posts a recommendation on a web-site, and now the number of distracted clients is really growing, and your business is going down. Would a new version really help in this scenario?

    In any case, with almost all enterprise products, and even some standalone ones, you would encounter such cases. This is why software’s ability to provide an integration API, or its ability to seamlessly become a part of an integrated infrastructure of products is important, it’s the need of the hour, and it’s this integration-ready software which would sell. This is the main reason for major players chiming SOA mantras in every major event, on every technical website.

    How do you go about the design decision?

    Following are three good ways to find out about how you should actually go ahead.

    1. If you are in the process of designing an enterprise level solution or for that matter any other solution, research the market to find out the prospect users. Talk to them, before designing the product, and not after the development is done. Ask them about what issue they have faced with paperwork between different departments. Ask them if they are looking for software that does not require manual intervention for communication of data between the software their other departments use. Next, ask your prospect customers what kind of "other" software would they like your software to work with. In other words, research on the environment in which your software would be deployed.

    2. If you already have a partner in the market, who complements your line of products with its own, ask them if they want their products to synergize with yours. Ask them what their software would need to "talk" to yours. Find out what would your software need to "talk" to theirs.

    3. Do you want to improve your future business, by providing APIs/Platforms for integration today? When you grow with an accounting package (for example), do you want to write and sell an inventory management system that talks to the latter? What happens when you write a shipping management system? In other words, does your vision extend to a scenario where this product you are writing is just the first in the line of a complete enterprise solution in future.

    If you have bought the idea of integration by now, you must start making decisions on implementation strategies for integration. I have borrowed some ideas, which you can easily extrapolate on.

     Implementation

     Now integration is definitely not anything new, and almost all enterprise software vendors have faced customer demands around it in the past. Some have solved it concentrating on the state storage system, some using messaging, and there are other ways too.

     Integration based on state storage systems

    This is a very fragile architecture, wherein when some data is changed in a software's domain, this software indicates other "integrated" software by either writing the data to a file or invoking a database trigger.

     Messaging

    Software sends messages to a sink, which other software read to update their data, according to the message. This is a very good and agile mechanism. Unfortunately, traditional messaging techniques are more or less platform or OS specific.

     XML based messaging and SOA

    This is an extension of the previous, but because of the use of XML, this makes it possible to integrate with a wide range of products. Morover, a good service oriented architecture enables other software systems to indicate data/state change to yours, and thus provides a way to complete integration. My team is freshly through the integration phase, where we integrated an EMR system, running on a Unix machine and exposing a Java web-service, with one of our client's .Net based medical transcription products. There are many ISVs that specialize on integration, some use Enterprise Service Bus(ESB) products (mostly Java), while Microsoft is taking integration forward with Biztalk.

     
    I would therefore strongly suggest SOA, if and when you decide on your integration strategy. And yes, don't forget to put that paragraph on why or why not you are considering integration, in your design document. Follow this up with a good strategy (if yes), based on strong market research. There are some good books and web-sites in the market for Enterprise Application Integration (EAI), EAI Patterns etc. which would definitely help you find out the correct integration strategy. Just open your eyes.

     

  • Friday Trivia

    • This was a poster put up in 1978 explaining something. Who put it up and what is being explained?

     

                                 * If it's there and you can see it--it's real

                                 * If it's not there and you can see it--it's virtual

                                 * If it's there and you can't see it--it's transparent

                                 * If it's not there and you can't see it—you erased it!

     

     

  • Definition of a "Wicked Problem"

    Off late I have been using this term a lot, since I read about it in a Stephen Covey book.

    A wicked problem is a problem that could only be defined by solving it, or part of it.

    I have been busy currently on a product that manages more than a GB of data transfer between servers and automates several workflows, and God knows how many wincked problems have been defined till now. And there are still many of them left to be solved.

    A simple example of a wicked problem that I am going to face is software performance. Wonder if you can share some?

More Posts