Software pattern