Solving complex problems