Three Tier Software Architectures