Make everything as simple as possible, but not simpler.

--Albert Einstein

Now that we know how to handle all the details, the only thing left is how all the pieces fit together.

To understand which decisions are being made during the design, we have to take a look at the following discussion points and their rationales:

Use the SyncML protocol

Based on the discussion in Chapter 4, Protocols and data formats we chose the SyncML protocol for handling the actual synchronization process.

Put all functionality in a common library

It must be very easy to adopt any existing client or server to the new protocol. Therefore, all protocol specific functions must be hidden under a layer of common functions.

Extensibility

Internet standards evolve quickly. The programs must be written with extensibility and many possible future uses in mind.

Speed

The library must be fast. A server could have a lot of requests and should be able to handle all of them within reasonable time.

Low memory footprint

The core functionality should also be available on low end computers or handhelds. Usually they have very little RAM available.

Secure and error proof

This does not only apply to other broken implementations, but also maliciously sent false packets. The framework must not crash or compromise security, no matter what it receives.