Three Layers of Software