Worldolio Development Metrics

Worldolio is more than a very useful management tool it is also an experiment in software development. When attempting to select an architecture for a piece of software there are a number of factors that have to be considered.

  • How quickly can the software be built?
  • What experience or skill is required to build the software?
  • How fast will the software run?
  • What is the target environment required to use the software?
  • How easy is it to test the software?
  • How easy is it to make changes?
  • How complex is the code?

We intend to record and measure the different approaches taken to gain a better understanding of the strengths and weaknesses of each approach. This document details and records the metrics we have gathered.

Progress

We need to bear in mind that sometimes we are not comparing like with like. Each of the architectures may be at different stages of development. Therefore we need a definition for each level (v1, v2 etc)

Worldolio v1

  • Add and remove cities to a group from a database of 500 cities
  • Nominate a city in the group as home
  • Display a grid of information for the group of cities where information can be resized, reordered and hidden
  • Display a map showing the day night shadow and the cities in the group
  • Enable the user to select a date and time and have the grid updated for that date and time
  • Display detailed information about a selected city
  • Allow display units to be configured (miles, km, 24 hour, am/pm etc)

Each version of the application may be at different stages of development, for example a version may be

  • Complete: It has implemented all the features
  • Partial: It is useable and function however it is not complete
  • Prototype: Basically a proof of concept

The metrics are for these versions of Worldolio

Version    Technology    Status
Worldolio Web    HTML, ASP.NET, C#    v1 Complete
Worldolio MobileWeb    WML, ASP.NET Mobile Controls, C#    v1 Partial
Worldolio.NET for Windows    .NET, C#    v1 Complete
Worldolio for PocketPC    WIN32 API, Embedded C++    v1 Complete
Worldolio.NET for PocketPC    .NET Compact Framework, C#    v1 Complete
Worldolio.NET for Smartphone    .NET Compact Framework, C#    Prototype

Effort

The time in man hours devoted to each part of the work.

Component Man Hours
Worldolio Web 90
Worldolio MobileWeb 26
Worldolio.NET for Windows 52
Worldolio for PocketPC 159
Worldolio.NET for PocketPC 166
Worldolio.NET for Smartphone 9
Base .NET Data Engine 152
Hosting Web Site 49

Observations

  • The Hosting Web Site are the pages on this site that are not part of the Worldolio Web application. For example the FAQs, Download pages and this page.
  • Technically Worldolio Web isn't complete as the columns on the grid cannot be customised
  • Some of the time used to do initial development work to build the database of cities into the engine was not captured
  • We were experience in .NET, C++ and HTML however we had to learn .NET Compact Framework and mobile web site design.

Surprises

  • It would appear that we do not write .NET code faster than C++ code. This may be because we are both experienced C++ WIN32 API developers and had not used the Compact Framework before.

Code

Metrics of the source code. Source code metrics have been gathered using SourceMonitor.

Version Number of Lines
Worldolio Web 12,289
Worldolio.NET for Windows 4,403
Worldolio for PocketPC 5,246
Worldolio.NET for PocketPC 4,485

The Kiviat graphs give an overall feel for the project.

Kiviat graph for website
Kiviat graph for windows version
Kiviat graph for c++
Kiviat graph for compact framework

The complexity graphs show the number of file that have a given maximum complexity. So for example there is one file in each project that has a complexity rating of 12 or 13.

Complexity graph for website
Complexity graph for windows version
Complexity graph for c++
Complexity graph for compact framework

Observations

  • Worldolio.NET for PocketPC does include 488 lines of code in the DateTimePicker (it is not in the Compact Framework) whereas the C++ version can use the native control.
  • The file that has a complexity rating of 17 file in Worldolio.NET for PocketPC is the DateTimePicker control.
  • The web site is used to host the downloads as well as provide the Worldolio app which has inflated its code size and complexity. The metrics do not take into account client side script.

Surprises

  • Wow, we really expected the C++ code to be a lot bigger and a lot more complex than the C# code
  • Code complexity is related to the task being performed rather than the language being used.
  • The web site is the largest and most complex project even allowing for it hosting the downloads.

Product

Metrics for each installable version.

Version Size of deployment   Deployment type   Memory footprint
Worldolio.NET for Windows 500 KB msi 10 MB
Worldolio for PocketPC 400 KB cab 500 KB
Worldolio.NET for PocketPC 1.1 MB msi 4.25 MB
Worldolio.NET for Smartphone 150 KB cab n/a

Observations

  • The .NET deployment sizes do not include the .NET Framework (20MB+ for the PC, 10MB+ for PocketPC)
  • The PocketPC msi contains the 4 processor specific cabs. In reality only one cab is actually required. The cabs are each about 450KB.

Surprises

  • The memory footprint for .NET applications is colossal.

Performance

You may prefer to download and run these to get a feel for how fast they perform. All times in milliseconds (1,000 milliseconds = 1 second).

Version Device Launch the app.   Display change cities dialog   Show nearby cities by
  clicking on the map
Worldolio for PocketPC v1.3.2 Dell Axim X5 @ 400MHz
PPC 2003 v4.20.1081
1,095 102 219
  
Worldolio for PocketPC v1.0 Casio E125 MIPS @ 150MHz
PPC 2000 v3.0.9348
1,641 370 641
  
Worldolio.NET for PocketPC v1.4 Dell Axim X5 @ 400MHz
PPC 2003 v4.20.1081
.NET v1.0.3316 (SP2)
3,248 296 297
  
Worldolio.NET for PocketPC v1.4 Toshiba E400
PPC 2003 v4.20.1081
.NET v1.0.3316 (SP2)
4,459 361 263
  
Worldolio.NET for PocketPC v1.4 HP Jornada 565 @ 200MHz
PPC 2002 v3.0.11171
.NET v1.0.3316 (SP2)
6,531 484 308
  
Worldolio.NET for PocketPC v1.4 Casio E125 MIPS @ 150MHz
PPC 2000 v3.0.9348
.NET v1.0.3316 (SP2)
10,709 686 1,084
  
Worldolio.NET for PocketPC v1.3 Dell Axim X5 @ 400MHz
PPC 2003 v4.20.1081
.NET v1.0.3316 (SP2)
4,634 1,574 1,717
  
Worldolio.NET for Smartphone v0.9.0.2   RedE SC1100
Smartphone 2003 v4.20.0
.NET v1.0.3111 (SP1)
17,434 1,771 n/a

Observations

  • The C++ application was built with eVC v3
  • The C++ is sharp and snappy and despite a lot of work the .NET one still feels a bit sluggish.
  • The neaby cities dialog for the C++ version is more complex than the .NET version as it presents list of neaby cities ordered by distance.
  • These times do not include any time to spin up the .NET framework, in other words its not a completely cold start
  • The effort required to go from Worldolio.NET for PocketPC 1.3 to 1.4 was 30 hours

Surprises

  • The .NET performance is pretty good. It has taken a lot of effort to optimise the code, and virtually no effort in C++.