Software engineers are constantly asked to design and build the things they work on. It’s not a straightforward process of sticking two things together, based on some predefined blueprint.
We make the blueprints while we code. On top of that, systems as they come together sometimes show problems that need fixes, because of the scale of the system. Then we need to completely redesign for the newer bigger problem.
Using the welding analogue, sometimes you start building a BBQ, and end up making a bicycle or a rocketship.