solving complex problems