Parts, Pipelines, and Declarative programming: An architectural model