La arquitectura de la aplicación, a pesar de hacer todas las concesiones a la brevedad, intentará emular la de un servidor de datos a medida. Nuestra base de datos utilizará el servicio más simple de datos persistentes de Python, dbm.
La primera capa, precisamente, nos independizará del servicio de datos subyacente a nuestra aplicación, ofreciendo una interfaz orientada a objetos especializada en el tema de interés de nuestra aplicación. Como ejemplo sencillo, hemos tomado una agenda de direcciones de correo electrónico. Dispone de funciones para añadir direcciones y buscarlas posteriormente a partir de la clave exacta (búsqueda rápida) o a partir de cualquier parte de la clave (búsqueda lenta).
La segunda capa (versión tkinter) implementa una interfaz de programa interactivo clásico. En general, las interfaces de este tipo son mucho más rápidas que las interfaces web, aunque exigen al cliente tener instalado cierto software. La ventaja de Python en este caso es que está incluido en todas las distribuciones de Linux, y que la instalación en Windows se hace de una vez por todas, sin exigir instalaciones posteriores en ningún caso. Es posible generar ejecutables autocontenidos (que incluyen su propio intérprete) si se desea asegurar que la ejecución es correcta (sería parecido a una compilación estática).
La segunda capa (versión HTTP) implementa un servidor de aplicaciones mínimo, pero completo. Lo único que hace es esperar peticiones en el puerto 8000. Si alguna de las peticiones es al documento /busca, con el parámetro CGI param, se ejecuta el método homónimo sobre el objeto agenda (que abre la BD una sola vez, lo que le permite responder con más rapidez que un CGI) y se devuelven los resultados con un formato HTML presentable.