How does software become complicated?