Digital Design and Software Architecture