
By David Wood
1.1 The phenomenon of smartphones
1.2 Taking advantage of the smartphone opportunity
1.3 The role of the smartphone operating system
1.4 Regarding APIs and operating systems
1.5 Why Symbian OS?
1.6 Aside: from organizers to smartphones
1.7 Coming to terms with Symbian OS
2.1 High-level components of a smartphone
2.2 Providers of integrated solutions
2.3 The commercial model of a smartphone project
2.4 Some conclusions from the smartphone commercial model
2.5 Typical smartphone project timescales
2.6 Warning regarding timescales
2.7 Factors influencing project timescales
2.8 The big picture: beyond timescales
3.1 ISV smartphone opportunity and risk
3.2 Beyond technical skill-sets
3.3 Different routes to market
3.4 Symbian endorsements
3.5 Companion Technology Program
3.6 Symbian Signed
4.1 Two kinds of battle
4.2 Multitasking
4.3 Messaging and entertainment
4.4 Mobile knowledge access
4.5 Organizers and finance
4.6 Pocket consolidators
4.7 Social tools
4.8 Personal development
4.9 Phones win
4.10 Openness wins
5.1 Smartphone projects vs. feature phone projects
5.2 Three approaches to large projects
5.3 How large projects differ from small projects
5.4 Project groupware
5.5 Confidentiality issues
5.6 Five central project documents
5.7 Auditing document readership
5.8 Processes and agility: education vs. processes
5.9 Problems when groupware is short-cut
5.10 Symbian’s use of groupware
6.1 Introduction to smartphone defect management
6.2 Living with defects
6.3 Aside: an embarrassing moment with defects
6.4 Defect priorities
6.5 The process of verifying a defect fix
6.6 Advanced defect investigation
6.7 Defect status values
6.8 Defect database requirements
6.9 The role of the project leader in managing defects
7.1 Introduction to configuration management
7.2 Aside: learning about configuration management
7.3 Consequences of weak configuration management
7.4 Basic principles of configuration management
7.5 Codeline strategy – single projects
7.6 Codeline strategy – multiple projects
7.7 Beyond codeline strategy
8.1 Integration vs. creation
8.2 Mainlines and development codelines
8.3 Iterative development
8.4 Gate-keeping and integration tests
8.5 Dealing with build or test failures
8.6 The weekly integration cycle
8.7 Integration discipline
9.1 Knowing when components belong together
9.2 Limits of rebuilding source code
9.3 Forms of compatibility
9.4 The compatibility virtuous cycle
9.5 System compatibility board
9.6 Responsibilities with regard to compatibility
9.7 Interface access and interface status
9.8 Versioning
9.9 Future-proofing interfaces
10.1 Beyond complete testing
10.2 Testing in context
10.3 Functional tests
10.4 Basic Acceptance Tests
10.5 Specialist tests
10.6 Friendly User Tests
10.7 Mandatory tests
10.8 Automated tests
11.1 The need for a tools champion
11.2 Debuggers
11.3 Emulators
11.4 Profilers and loggers
11.5 Static code analysis
11.6 Build system
11.7 Distribution system
11.8 Miscellaneous tools
11.9 Dangers with tools
12.1 Beyond complete planning
12.2 Causes of change
12.3 Handling change requests
12.4 Variable task estimates
12.5 Practical example of agile scheduling
12.6 Accepting slack
12.7 Aggressive vs. defensive scheduling
12.8 Authentic vs. inauthentic scheduling
12.9 Beyond meeting customer requests
13.1 The 80–20 rule for planning
13.2 Identifying the project planning hot list
13.3 Iterating the project plan
13.4 Developing features outside the agreed core
13.5 The 80–20 rule for task estimation
13.6 Typical project trouble spots
13.7 Pros and cons of milestone reviews
13.8 Dealing with milestone delays
13.9 Cut features not corners
14.1 Beyond difficulty
14.2 Reuse rather than reinvent
14.3 The benefits of frequent releases
14.4 Symbian’s adoption of the frequent release model
14.5 Use of reference designs
14.6 Silver bullets vs. disruption
15.1 The birth of EPOC32
15.2 Defining the EPOC RISC architecture
15.3 Software goals from 1995
15.4 Separating the engine
15.5 Nine passions
16.1 The original electronic organizers
16.2 Limits of Moore’s Law thinking
16.3 Causes of code bloat
16.4 Designing algorithms
16.5 Understanding the compiler
16.6 Adopting OO
16.7 Selecting C++
16.8 Text descriptors
17.1 Alloc heaven
17.2 Expecting the unexpected
17.3 The perils of multitasking
17.4 Exception handling
17.5 Common mistakes in destructors
17.6 Seeking out failure cases
17.7 Attitudes towards defects
17.8 Protecting the smartphone vital assets
18.1 ‘‘The operation was a success, but the patient died’’
18.2 Enchantment
18.3 Designing the user interface
18.4 Multimedia performance
18.5 Understanding the real competition
18.6 Customer orientation for developers
18.7 Designing panics
19.1 Preparing for variants
19.2 Be ready to fail fast
19.3 Prepare your own SDK
19.4 The value of co-development
19.5 Basic principles for reusable solutions
19.6 The value of architecture
19.7 The value of ignorance
20.1 The licensing question
20.2 Focus on strategy
20.3 Smartphone heritage
20.4 Active objects
20.5 Power management
20.6 Beware stray signals
20.7 Final comments on asynchronous events
21.1 Focus
21.2 Project manager vs. technical lead vs. product manager
21.3 Project review meetings
21.4 Commercial negotiations with third parties
21.5 Project manager authority
22.1 Pros and cons of support consultants
22.2 Cultivating connections
22.3 Building a team out of nothing
22.4 Helping consultants to be effective
23.1 The role of the post partum
23.2 Line management skills
23.3 Circulation of team members
23.4 Principles of collaboration
23.5 The increasing importance of software
23.6 A guide for software leaders
23.7 Symbian OS renewal