8 Steps To Successful Wireless Projects
8 Steps To Successful Wireless Projects
Overview: This paper will present a managerial and high-level technical overview of the process of developing
wireless applications. Initially, developing a wire less application may be viewed as a difficult challenge, but this
paper will introduce an 8 step repeatable process that speeds and simplifies development. It will discuss the
peculiarities of wireless applications, and once understood, a typical software development group should have a high
success rate on completing their first wireless application. This paper also supplies a case study and follows a project
from start to finish. The application can be accessed at http://aviddemo.com from any wired or wireless device.
Much has been written about the “Wireless Web”, giving many developers, managers and executives the impression
that wireless devices are just PCs in a reduced size. Unfortunately, this is a vast oversimplification and it has led to
many disappointing and failed wireless initiatives. The point is not to provide a replacement for the Internet in a
small screen (there is probably just as much demand for this as there is for handheld televisions), but to add an
invaluable tool for remote personnel.
The main purpose and benefit of a wireless device is improved communication between distant locations anytime,
anywhere. Wireless communication has been around since the early part of the last century, and has provided
enormous benefit to corporations and governments by allowing their people to talk to one another from remote
locations (cars, job sites, etc.). Wireless data communication has also been around for the last 30 years or so, but the
equipment was very expensive, often custom manufactured, and the coverage was extremely limited. In the past two
to five years, low cost equipment and ubiquitous networks allowed the wide spread adoption of wireless computer-
to-computer and remote data access.
Implementing a successful wireless project is more than plugging a wireless modem into a laptop – it requires
specific design and understanding of the equipment, the network and the nature of wireless communication. In this
paper, we will review what makes wireless development unique while showing how it fits into the existing
development process. It is important that enterprise IT organizations do not abandon existing software development
processes and techniques just because they are dealing with wireless devices.
To illustrate, we will follow a typical project from the genesis to completion. We will follow their steps as they
progress through the project and show how they handle each activity in terms of mobile devices during their project
life cycle.
The Problem:
“Where do I start?”
Joe has just left a meeting with his COO and VP of Sales. In the meeting, they discussed issues brought to their
attention by the buyers and sales personnel. The issues stemmed from the lack of real-time access to inventory
information. Sales people were taking orders for non-stocked items and the buyers were purchasing products for
which there was little demand. Last year, when business was booming their company could live with these errors
and inefficiencies, because demand was great everything was moving. But now, with a slowing economy, inventory
levels need to be closely monitored, and every order should be filled as soon as possible. The VP of Sales said that
if his sales people knew a certain item was backordered, they could suggest an alternative in-stock item to their
resulting in a 20% increase in fulfillable orders, improving inventory turnovers.
Joe’s group completed a web-based inventory reporting application six months ago, which he felt should have
solved these problems. It was a pretty amazing application, filled with charts, graphs and tables. The only mistake
was that the buyers and sellers worked mainly out of the office and did not have instantaneous access to this
information. About a year ago, the COO equipped her buyers with Palm computers that synced with a subset of the
inventory database, but she explained that all to often the buyers used information that was a week old or they
needed information that was not in the subset of synchronized data. On the VP’s last business trip, he read an article
in an airline magazine that talked about the new wireless web phones and PDA’s. He thought if Joe’s group could
connect these wireless devices into the company’s databases, then his buyers would always have up to the minute
information. He told the COO about his idea and she instantly saw how this could improve her buyer’s efficiency
and in turn reduce poor purchasing decisions.
So, the wireless initiative has been approved and Joe’s group is on deck to perform.
You will also see common concepts emerge (like both the Buyers and Salespeople need to look up current on hand
information). From the Use Cases the software development team will be able to approximate the effort and
estimate the project’s complexity, duration and cost. Use Cases are extremely useful for reviewing and prioritizing a
project – you may choose the five most important Use Cases to the customer to implement in the first phase of a
project, and save other less important items for another phase.
Match Vendor
offering with
Potential Need
Vendor
Buyer Analyze Current on
Hand & Last 3
Week Sales
<<actor> >
Inventory
Management
System
• Inconsistent Interface. With WAP phones you can only really presume a single selection button will be
available (the second, or OPTIONS button, may be designated for choosing the text entry modes). The reliance
on more than one button will limit the devices that can be used.
• Segmented Input Screens. A wireless device may not present the items on the screen as you would expect. For
example, Openwave (formally Phone.com) browsers present each input field on a separate screen, unable to see
previous inputs or prompts. Some phones show a placeholder for input fields but do not show the content of the
fields.
S ELE CT HO ME
SelectReport
Initial
1
A current trend in software development is Extreme Programming (XP). One of XP’s principles is simple tools, of
which our stickies are a perfect example. Using sticky notes, whiteboards and some formal models (to aid
understanding and communication) support XP’s paradigm of communicate, collaborate and feedback.
SKU NotFound
Screen:Inquir y Screen:SKUInquiry Screen:NoRecords
Reports Enter
Return /Mode=Dept
Return /Mode=SKU
Legend
STD STD: Season To Date
Screen:Reports Screen:DeptList COH: Current On Hand
Mode:Dept/SKU Mode:STD/Last3/COH Last3: Last 3 Weeks Report
Return
COH
STD Last3
Report Report
Report
2
This is not to imply a pure single pass or “waterfall” model for software development. We recommend a planned
interactive approach where these steps are followed for each iteration – from use case analysis to testing. Each
iteration has a defined goal and completion criteria and their duration may span from several days to several months.
3
For those interested in viewing the source code created for this example you can view it on-line at
www.avidwireless.com.
allowable operations. Since the Screen Flows will enumerate all possible logical flows through your application, a
finite set of test cases will provide a statistical confidence that you have completely tested your application.
Mobile and wireless applications require specific testing:
• Coverage. Test where the units move out of range in the middle of a transaction and then come back into range
1, 3, 5, 10, 15, 30, 60 or 90 minutes later. Test the effect when the device is moving between network cells or
receivers and the "hand-off" between these cells. Does the connection get lost? Is it hung up? Remember that
these are mobile devices and they will be moving around.
• System Failures. Simulate failures of any external system to this application, including networks, databases,
data sources, incorrect data, missing data and any external system component.
• Device Failures. Simulated failure modes of the device (dead battery, interference, missing accessories).
Document procedures to identify and rectify the failure – this will become the basis for your wireless help desk.
• Data dependent testing. Mobile devices are more susceptible to errors with long data messages. Some will
display partial messages, or an error screen, or just ignore the message. Understand the limitations and keep
messages concise.
• Latency testing. As mentioned before, wireless systems have delays (the Internet has delays but the high speed
and maturity of the technology usually makes this imperceptible). Latency is dependent on the carrier, their
equipment, transmission technology and system loading. Test your devices at various times of the day to ensure
the latency is within your requirements. Latency is also affected by your connection to the carrier. The more
direct a connection (leased lines, Frame-Reply) the less the latency.
• Middleware traffic capacity. Test that your server will be able to handle the projected traffic capacity. Wireless
servers are different from web servers in that they serve short, bursty messages while web servers serve
messages with longer content. A wireless page may contain 1,500 characters, while a web page may contain
10,000 or more characters. You may serve five wireless pages for a single web page containing the same
content. Servers that are based on CGI or scripting technology may become a bottleneck, while compiled
servers (Java) will be able to handle the load due to their faster performance and lesser amounts of processing
required for each request.
Wireless application testing is a new area and there are few tools available. The YoSpace SmartPhone Emulator
(www.yospace.com) has scripting capability to allow implementation of regression test scripts. Mercury Interactive
and other web testing tool vendors are in the process of developing and offering tools for wireless testing.
• Have the pilot users rotate by using various types of devices. It is important to understand what they view as
preferred devices and identify any differences between the applications operation with the different devices.
• Conduct review sessions and focus groups to analyze the results. Use the results to improve the system.
Expect the pilot project to last one to two months. If there are problems or changes that need to be made, do not be
afraid to delay deployment until these are all fixed. If the system is performing per the initial specification
(determined with your Use Cases) and the feedback is considered future enhancements, you should not delay
deployment of this system. The initial effort you made with the help of Use Cases will delineate initial requirements
from enhancements.
Summary
Wireless is available now and can be used for productive applications with immediate results. The devices and
networks will continue to advance, but these future enhancements will improve your application, not make them
possible.
An intelligent selection of middleware and selection of a vendor that is firmly committed to the wireless space will
"future-proof" your investment. Some wireless servers allow development of device agnostic applications, allowing
your developers to concentrate on business rules and quickly create applications. Wireless devices are "anywhere,
anytime" information devices that provide a very different set of benefits from conventional web applications.
Limiting yourself to simple translation of your current web or terminal applications to the wireless world will not
provide you the benefit, or payback, that an application designed for the wireless paradigm will give you. To have
value, wireless applications must provide seamless connection to your database and information repositories.
Screen drawing tools will not allow you to create data intense, dynamic applications. The web is largely used for
marketing and therefore is mainly a display medium (like television), wireless is a two way communication medium
(like 2-way radios or telephones). Use technology that understands this medium and allows you to take full
advantage of it. Now is the time to start your first wireless application!
AVIDWireless
7750 N. MacArthur #120-340
Irving, Texas 75063
972-401-3655 888-772-4570
[email protected]
www.avidwireless.com
/**
* SCREEN: SeasonToDate<p>
* PURPOSE:
*
* MODE: The allowable values for mode are:<p>
* None - We do not care about mode for this screen it will all be handled the same<p>
* RESULT: The form will return these result codes:<p>
* Style - sends the user to the style inquiry screen<p>
* Program - sends the user to the program inquiry screen <p>
*
*/
/* Static constants for this screen. Typically used for items to be initialized once*/
static private final int debug = 1; // our debug level (Apps are 1)
/*
* Instance fields. Beware that there is a single instance per application, not per user.
* Users run as multiple threads in a single instance, so instance fields are common
* to all users.
*/
//################################################################################
/**
* This will display our information to the user at their display. It can read
* session variables using .getSessionxxx methods, and any URL parameters with
* getScreenFieldxxx methods.
*
* @param user The instance of our user, with session, cookies and the current display device.
* @param mode Our current mode. It may be "None" if this doesn't really matter
*/
public void display (User user, String mode)
{ // begin display section
String myName = NAME+".display";
avidUtil.debugln(debug,myName,"SCREEN="+NAME+" MODE="+mode);
if ((!grandtot.getDbConnStatus()) || (!iteminfo.getDbConnStatus()) ||
(!items.getDbConnStatus())) // test if we have a valid connection
{ // we have don't have a valid database connection
if (iteminfo.findBy(classID))
{ // find class info
sKU = iteminfo.getSku();
avidUtil.debugln(debug,myName,"Found sKU information for "+classID);
} // end find class info
else
{ // did not find info
avidUtil.debugln(debug,myName,
"Could not find iteminfo Information for class id"+classID);
user.display.addText("Could not find Information for "+classID);
} // end did not find info
if (items.findBy(sKU))
{ // find class info
itemDesc = items.getDesc();
avidUtil.debugln(debug,myName,"Found itemDesc information for "+sKU);
} // end find class info
else
{ // did not find info
avidUtil.debugln(debug,myName,"Could not find sKU Information for sKU "+sKU);
user.display.addText("Could not find Information for "+classID);
} // end did not find info
if (grandtot.findSTD(classID))
{ // get the information from the Grand_totals table
avidUtil.debugln(debug,myName,"Found YTD information for "+classID);
sales = grandtot.getSales();
receipts = grandtot.getReceipts();
avgSales = grandtot.getPerWeekUnits();
if (mode.equals(AVIDInventory.Modes.SKU))
{ // add the Entry button for returning to the Style Inquiry screen
user.display.addText(user.display.underline(sKU+" "+itemDesc), attrLeft);
} // end add the entry button
else
{ // mode is dept
user.display.addText(user.display.underline(deptDesc),attrLeft);
} // mode is dept
grandtot.closeDB();
user.display.beginForm();
user.display.addSubmitButton("Reports", AVIDInventory.FieldNames.SUBMITBUTTON,
"Reports", Attribute.BUTTONTYPE_ACCEPT);
if (mode.equals(AVIDInventory.Modes.SKU))
{ // add the Entry button for returning to the Style Inquiry screen
user.display.addSubmitButton("SKU", AVIDInventory.FieldNames.SUBMITBUTTON,
"SKU", Attribute.BUTTONTYPE_ACCEPT);
} // end add the entry button
user.display.endForm();
user.display.endPage();
/**
* This is called for a POST of data. It will retreive the field data using .getScreenField.
* It will contain the logic to process the input data.<p>
* It will return a the result String (the return from our submit) which will tell the
* next screen to process. If we display information on this method or if
* there is an error and we have displayed an error page then we return null.
*
* @param user The instance of our user, with session, cookies and the current display device.
* @param mode Our current mode. It may be "None" if this doesn't really matter
* @return The Result code string if successful or null if there was an error and
* we shouldn't be going on.
*/
public String submit (User user, String mode)
{ // begin submit
String myName = NAME+".submit"; // set our method's name for errors
avidUtil.debugln(debug,myName,"SCREEN="+NAME+" MODE="+mode);
if (buttonPressed.equals("SKU"))
result = AVIDInventory.Results.ENTRY;
return result;
} // end of submit
} // end of SeasonToDate