Если в понятие "сложный" вкладывают смысл слов "запутанный", "нагромождённый", то скорее такой код будут писать те, у кого мало опыта. Обычно из-за незнания каких-то коротких путей или нечёткого представления о том как что-то устроено.
Если же речь о сложности в качестве смысла "изощренности", то это может случиться когда программист первоначально строит модель "всей вселенной", чтобы код подходил на все случаи жизни. А бывает и что лень упрощать переусложнённую систему либо нет достаточно времени, в результате чего программист решает, что проще добавить незначительное усложнение. Тогда ПО может дойти до критической точки, когда становится слишком дорого что-либо изменять в нём.