Success Is Driven by a Few Key Factors Successful engineering is about making good design decisions. Central to this is the ability to discern what is most important, to separate the wheat from the chaff, and to identify the key areas to spend your valuable time thinking about. In any activity you can easily separate the experts who "make it look too easy" from the struggling novices. The difference is simple: The experts make it look easy because for them it is! They implicitly know what to concentrate on and what can be safely ignored. The novice, on the other hand, does not have this knowledge and so exhausts himself or herself trying to concentrate on everything simultaneously, with predictable results. Anyone who has ever gone from being a beginner skier or windsurfer (two sports with steep learning curves) to a level of expertise will immediately appreciate this. Sometimes the experts are not even aware of what makes them experts; they just implicitly know how to do the right things (something that drives novices looking for tips crazy). Learning what is important to concentrate on is the key to becoming an expert. Looking at this mathematically, the concept is known as "first-order effects" versus "second-," "third-," and "higher-order effects," the idea being that in any given equation with many separate terms there are those factors that matter and those that "really matter." The lowest-order effects drive the overall behavior of the system. So it is with mobile software development; everything matters, but some things matter a great deal more than others.Success in mobile software development is driven by the following factors. All are important, but the first ones are the most important. In order of decreasing importance, they are as follows:Scope of application It is most important to have a firm idea of what the mobile application is intended to accomplish both in terms of overall vision as well as in concrete user scenarios. This statement may seem self-evident, but "feature creep" and ambiguous goals have persistently plagued modern software development projects; they have brought to ruin many promising projects both big and small. Mobile software development is no different. Successful mobile applications need to have more focused purpose and more specific goals than their desktop and server counterparts. Having a firm vision for what the application is going to enable the user to do is essential. Equally, if not more important, is a firm statement for the things the mobile application is not intended to do. Focus of purpose is critically important.Performance Having established the vision and scope for your mobile application, next in line is performance. More than any other application characteristic, performance will govern the success of your mobile application. More than desktop or server applications, mobile applications need to be highly responsive. If you do not achieve great performance, none of the other design decisions you make will matter. Think of how frustrated you would be if your phone did not let you dial numbers as rapidly as you can type them on the keypad; mobile device users demand responsiveness. Importantly, performance is not a matter of hand optimizing every line of code (often this is self-defeating), but rather understanding what is most critical from an end user's perspective and then concentrating your creativity and design skills in these areas to make the experience great.Proper UI design Mobile device user interfaces need to provide a focused and intuitive experience. The user interface of a mobile device is very different from what desktop applications typically present. Physical differences in mobile device displays and input mechanisms exist along with different user usage patterns. Additionally, end users may have differing degrees of experience and familiarity with using desktop software or the mobile devices you are targeting; this may introduce additional design requirements for your user interface design. It will require practice and iteration to get the user interface right. You will design, redesign, and redesign again before you arrive at a great user experience for your mobile application. Your code needs to be flexible enough to allow you this freedom to iterate on your design. There is both an art and a science to this.Data model / memory model How your application internally represents its data, how much it holds in its memory at any given time, and when it disposes of data are of fundamental importance to how your application will perform.Communications model Having a good model for how and when data will flow between the device and other computers is a requirement for successfully building great mobile applications. Mobile devices can communicate with desktops, servers, and other devices; each of these interactions needs to be understood and engineered properly. Even more than for desktop applications, you must account for intermittent connectivity, situations where bandwidth is limited or expensive, and unreliable communications channels. |