How To Describe Software Features To Developers

Clients (business people) and programmers speak and think differently. Miscommunication leads to programmers not delivering what the clients want (mismatch of expectations).  As a result, time (effort) and money are wasted. Extra time is needed to correct the developed software, which implies, more money spent and delayed launch. Software Engineering is a very specific field, very different from Business. Programmers speak a different language, and describe/approach problems differently. Client’s notion of “frame”/”dialog”/”security”/”screen”/”page”/”user” may be understood differently by a programmer. I am sharing my approach to understand what my clients want. This post will be helpful for clients to describe what they want, and programmers may use this approach to gather requirements from clients.

The key point is to be as specific as possible, and preferably, describe features in a measurable/testable way. “Building a beautiful e-Commerce website” is too vague, and you cannot objectively test if the website is beautiful. “User can make payment using PayPal” is en example of testable statement. The client should describe, from user’s perspective, what does a user sees on each page, and how user interacts with each page/screen.

Who

Describe users in terms of roles. Some of the possible user roles:

  • Logged in user
  • Registered user
  • User account account
  • Administrator
  • Manager
  • Buyer
  • Seller

Questions to ask:

  • What are the different types of users?
  • What are the difference between each type of user?

How

Describe the functionality (from user’s perspective). Describe the actions performed by the user, and results of each action.

Examples:

  • User signup for an account with username, password, email address information. Upon successful signup, user can login with the username and password.
  • User specify search criteria (price, property type, location), and sees a listing of property that meets the search criteria.

Saying “User can purchase a product” is not enough. Programmer should work with client to break it down into steps, each step is equivalent to a screen. Describe the series of screens that a user will encounter, from selecting products to getting successful payment confirmation. For complex operations, it might be easier to use a flowchart to describe each performable action. A few rounds of iteration may be needed to break down the abstract actions into screens.

Questions to ask:

  • What does the user do with the software?
  • How does the user use the software?

Capturing User’s Input

When user has to input some information,

  • List out all the fields (e.g. name, price, address, model number, …)
  • Specify possible/tupical values/ranges of each field. It may be price range, or values that follow a certain format.
  • Specify which fields are mandatory, which are optional.

From The User’s Perspective

It is important for programmer to describes features that is of values to the user. Usually users do not understand with is CMS, and do not cares about database and API. (Unless the targeted user of the software is a programmer.) Instead of talking about tables in database, describes the input fields visible to user. Describe what user sees/clicks/types on the page, not how programmer implements the software.

Use Visuals

It is true that a picture speaks a thousand words. Flowcharts, sequence diagrams, and wireframes are very powerful tools for communication requirements. Client may user existing software and websites are references. For each reference, client should describe why or which part of the reference describes what he/she wants.

Summary

Be as specific as possible, describe what the users see and do. Clients should describe features that can be objectively verified. Visuals are preferred over words.

Posted in Blog at May 12th, 2013. No Comments.

Enabling Hibernation in Xfce 4.10 on Arch Linux

This is how I get hibernation to work on my Xfce desktop.

Current installation:

Xfce power manager allows option of locking the desktop before the system suspends. xflock4 is used to lock the desktop, but it requires you to install either xscreensaver or gnome-screensaver. I have chosen to install xscreensaver.

Configurations

Step 1

Systemd handles some power-related ACPI events. This interferes with Xfce’s power manager. Configure the /etc/systemd/logind.conf file to allow Xfce power manager to handle the ACPI events.  (Ref: http://bit.ly/16DRewB)

HandlePowerKey=ignore
HandleSuspendKey=ignore
HandleHibernateKey=ignore
HandleLidSwitch=ignore

Step 2

Add resume hook to /etc/mkinitcpio.conf.

HOOKS="... ide scsi sata lvm2 resume filesystems"

Run “mkinitcpio -p linux” to rebuild initrd image for the change to take effect. (Ref: http://bit.ly/18kHxm3)

Step 3

In order for hibernation to work, a snapshot of the memory will be stored in swap partition. We need to inform kernel (at boot time) which is the swap partition for loading the snapshot image. Determine the UUID of swap partition using blkid (in util-linux package).

Update kernel parameter in /etc/default/grub:

GRUB_CMDLINE_LINUX="resume=UUID=xxxxx-xxxx-xxxxxx-xxxxxx"

Run “grub-mkconfig -o /boot/grub/grub.cfg” for the change to take effect. (Ref: http://bit.ly/15ePB8B)

==

That’s it. Restart your machine with the updated kernel image.

Posted in Blog at May 4th, 2013. 2 Comments.

Simple Mobile Browser Detection

http://detectmobilebrowsers.com/

Just found a great website the generate scripts for detecting mobile browsers. It detects mobile browsers based on useragent. It generates script for Apache, ASP, PHP, JavaScript, Python, …

Posted in Tao Of Programming at November 27th, 2012. 2 Comments.

How To Report A Bug

If enough relevant information is communicated to the developer, it helps in the debugging process.

#1
List a series of steps (actions you performed) to reproduce the bug. The developer needs to be able to reproduce the bug.

#2
Describe your observation when the bug occurs. Be as specific as possible with the description. Describe what is the behavior/output. Optionally, you can also mention what you think is the expected output. Saying “the application is not working” is not good enough. You can be more specific by saying “An dialog box with title ‘XXX’, message ‘YYY’ poped up”, or “The application crashed”.

Screenshots and error logs helps too.

Posted in Blog at July 19th, 2012. No Comments.

Shell Script For Installing/Uninstalling/Launching APK

My job requires me to install APK, launch application, test application, and uninstall application. Wrote this script to automate commands I have to run in console.

Posted in Tao Of Programming at April 19th, 2012. 2 Comments.