1. A computer programming system, comprising: at least one processor; a component that acquires a tier independent computer application; a splitting component, at least partially executed by the at least one processor, that links the application to one or more pre-split libraries to split the application into a plurality of tiers to facilitate distributed execution across the tiers and preservation of sequential semantics, and that replaces synchronous code of the tier independent computer application with asynchronous code; and a test component that enables at least one of testing or debugging of the split application in a simulated distributed environment.