software boundaries