in

Emerald Hand

Emerald Hand, Inc. community home page.

This Blog

  • Home
  • Contact
  • About
  • Directory of Computers/Tech Blogs

Syndication

News

I'm back to blogging

Worm in liquid maze

Design and development of information management tools.

February 2006 - Posts

  • Design - what's in a name?

    Today I want to write more on design. In a previous post I talked about design goals, complex vs. simple design and how to recognize whether design is too complicated or not. Design is quite important in all aspects of life and so it's very important to understand what it is and how it can be improved. Personally I want to get better at it and I think one of the best ways to get better at something is to try to analyze what it is, how it's done, how it can be improved.

    First, I think we should define what design is. Joel says it "is about making trade offs". He also points out that in the long run it's beneficial to spend more time to create a better design and quotes Themas C. Gale ("Good design adds value faster than it adds cost.") Dictionary.com defines design as "a drawing or a sketch; a basic scheme or pattern that affects and controls function and development". There are more definitions, but I tried to pick definitions related software development. In other words, design is a plan of how to keep the balance, how and where to make trade offs. However, when I see something really well designed, I don't really see a plan, I don't really see all the trade offs, issues that had to be balanced. I see a product that looks good, easy to use, etc. It would be more appropriate to say that design is a shape, color, features, some parameter (or combination) that is important to me (the user) and that makes my life better. The better my life (or some aspect of it) ends up the better the design is.

    Design label is slapped on several related things: it's a process of creating a plan to balance trade offs that would result in an aesthetic product. And I'm barely scratching the surface. There are different types of design, from fashion and graphic to industrial and system.

    Even in one field, such as software development, there are different levels and types of design. Web design (combined with graphic design and programming) is often used to talk about the external view of a web page. Class design is related to internal parts of an application. System design talks about how everything works together. Design is everywhere!

    If you want to learn to create better design I think it's important to recognize what it is for you and to be able to recognize good design vs. bad design, and at some point to see how things can be improved. As an exercise I propose for you to look for design when you are using something, or just when something catches your attention. Try to see what was done well and what was done badly. What trade offs (money, time, usability, aesthetic) did the designer have to make and how did he balance the issues. Think about possible users of the item. Would everybody like it and would it be intuitive to use for everybody? This doesn't have to be an involved exercise. Just a quick thought to get into a habit of thinking about design. I will try to do the same and write more on what I notice.

    In my next post on the subject I want to talk more on the meaning of design. Knowing what it is (a process and it's about trade offs) should make it easier to improve it. I'll try to explore that.

    Share this post: Email it! | bookmark it! | digg it! | reddit!
    Readability Stats: Word Count: 620; Sentence Count: 38; Grade Level: 7.2, more info...
    Posted Feb 20 2006, 01:43 PM by Ornus with 1 comment(s)
    Filed under:
  • JSForms 0.3.1

    New version of JSForms is released. It's a minor update to 0.3 and focuses mostly on improving the tree control. It also has two important new features.

    First the code is compressed on build (library only download), cutting the total library size in more than half. Compression cuts out most of the spaces, CRs (character return)  and all of the comments. Initially I had some problems with compression breaking the library. I forgot (or didn't know better) to add a semicolon (;) after function closing bracket (}). This is all fixed now. JSLint was priceless in finding the source of this problem.

    Second new feature is support of a control chunk to disable selection in a control. It works by canceling default action for onselectstart (in IE) or onmousedown (in other browsers). It supports filtering to enable selection in certain elements (input and textarea by default). This is useful because selection sometimes gets in the way, of drag and drop in the tree contorl for example.

    The tree has a lot of improvements. It now fires events when modified. Tree style has been improved and the columns now can have names. I also started to work on an example to generate HTML pulling data from a database for the tree using ASP. It's not quite completed yet. It will be in the next version.

    Download it now or read more about new changes in the change log.

    Also a new version of JSLint was released. I use it constantly to find errors in JSForms and quite a few it has saved me times from long hours of digging through the code. It is an important tool for any JavaScript developer.

    Share this post: Email it! | bookmark it! | digg it! | reddit!
    Readability Stats: Word Count: 284; Sentence Count: 24; Grade Level: 6.2, more info...
  • JSForms 0.3

    Several days ago I released 0.3 version of JSForms. Download it now!

    This release mostly focuses on polishing existing controls and fixing bugs. Menu gained support for check-buttons and icons. I think in the close future it can act as a toolbar. Tree has been rewritten from scratch. It is now based on HTML tables. As a result columns width is updated dynamically. It also gained support for keyboard and drag and drop (IE only for now).

    I added change log and road map.

    I have also created an online Subversion repository. You can check out the latest code from there.

    Share this post: Email it! | bookmark it! | digg it! | reddit!
    Readability Stats: Word Count: 103; Sentence Count: 13; Grade Level: 4.3, more info...
  • Design goals

    I was thinking today about what design is and what it should do. My short version: good design keeps things intuitive for the user. Seems simple, but in reality it's not. I often forget about who I'm designing for at the moment (myself, another developer, user, another class?). Sometimes it's not so clear who the user actually is. In addition good design keeps things well-balanced, and that's the hardest part.

    Let's look at example of creating a class. It is made up of several parts (interface, code, documentation, etc.) that potentially have different users. Actually everything starts with the application design. It should make it easier for me (the developer) to create classes that focus on one thing, but at the same time can be used in a variety of places. It would be best if the architecture design would take care of connecting classes together and initializing them (that's what dependency injection does).

    Class interface must be simple so that whoever is using the class can use and reuse it easily. It should emphasize the one thing class is trying to do. Everybody is familiar with this (high cohesion, low coupling, etc.) These guidelines, however, come from a more general principle: KISS (keep it simple, stupid). Keep it simple for the user (another developer, another class that will use this class, for the build process to generate good documentation, ahhhh, so many users to make happy). Simple to understand, simple to use, simple to document.

    There are a lot of potential issues with simplifying everything. At first it seems that by making things simpler you lose potential power, lose some features. For example a task item in it's simplicity could be just a text field describing the task (this is what BaseCamp does). In more complex scenarios the task would have text fields for the title, for notes, there would be an author, due date, duration, etc. The problem is that as the task entry becomes more and more complex it will be harder and harder to present information in the way that would be easy for the user to understand. It will probably require more detailed documentation (that probably nobody will care to read). If design is poor (and it's harder to make it good in more complex scenarios), the user will have to spend more time learning. In the first case the user could just jump in and create tasks quickly. Where is the balance?

    It's different in every case. On one hand there's simplicity (one field) and on the other there's a complexity (many fields). As things move towards complexity they become less and less intuitive. As soon as they stop being intuitive and easy to use design is too complicated. In addition, as user learns, things become simpler. So design needs to be simple at first, but provide new features over time.

    Start by making everything as simple as possible. Not as generic as possible, as simple as possible. Don't think about how how many ways something can be used. If you have a square hole you need a square plug. Creating a plug that can shape shift to fit in both square and round holes  makes the plug either too complicated to use or of such a shape that it doesn't fit anything anymore.

    Remember, potential users of your class include other developers who might want to reuse existing code. Aim to solve the problem at hand, but think about the possibility that the class could be extended in the future. Start by solving a problem. If a similar problem arises in the future you could try to go back and look at your code to refactor out common pattern that can be used to solve both problems. The simpler initial design wa,s the easier it will be to find such pattern and adopt it for new use.

    I'm not saying anything new and that all of this is common sense that was around 50 years ago. Still, I think it's important to remind that no matter what you do, keep it simple (but don't lose perspective). In the end you will make things easier for yourself.

    Joel is running a long series of articles on great design, if you are interested in more details on design topic.

    Share this post: Email it! | bookmark it! | digg it! | reddit!
    Readability Stats: Word Count: 755; Sentence Count: 48; Grade Level: 7.6, more info...
    Posted Feb 08 2006, 09:51 PM by Ornus with 1 comment(s)
    Filed under:
Copyright © 2006-2007 EmeraldHand, Inc. All rights reserved.
Powered by Community Server (Non-Commercial Edition), by Telligent Systems