First the projects are smaller.
Why won’t the programmer or IT person do the systems engineering? They simply have not been taught. Technically, Designing and programming are two different disciplines.
Programmers, often fancying themselves as designers, are taught to turn the requirements into a specification and build (program) the system according to the specification. But where do the requirements come from. That is definitely not their job. If the requirements don’t exist then the programmer is taught to take initiative and build the product according to prevailing design principals using the state of the art tools. The IT person in a small company is often self taught or right out of school.
The self taught IT person learns to procure parts and make them work together.
The just graduated IT person has learned to use a particular vendor’s parts and so builds homogeneous systems from parts.
In large companies, one system engineer can help direct the work of 10 or 20 software and hardware designers and programmers. If you have one programmer how do you staff .1 systems engineers? If you don’t then who is going to do the systems engineering? You have to rent one. You contract a systems engineer at the leading edge of a project and have them do the “due diligence” to be certain that the system development is headed in the right direction.
I have said for a long time that left with only two choices given an insufficient budget, I would rather build the right system the wrong way than to build the wrong system the right way. Why? You can often fix a system that has imperfections, but you can rarely make a system (built however elegantly) do something completely different than what it was constructed to do.