In tech companies, Design can play two roles - exploration and execution.
The goal of exploration is to figure out what to develop. Designers go through two divergence-convergence processes. The first is for problem definition, and the second for solution definition. Both processes can either happen in real life, for example, as a workshop, or in designers' heads.
Designers need to consider as many constraints as possible. The most important constraint is user needs. Other important ones include technical capability, business goals, and ethical rules. Constraints do not mean limitations. Some of them are necessary because design is an art of working under constraints.
Designers discover new constraints, enter unexpected territories, meet branches or dead ends. Experienced designers know how to leverage constraints and navigate through uncertainties. They also know when to write down those constraints and align with teammates.
Designers often don't know what the exact user problem is. Until they have a solution at hand. They revise the solution based on the problem, and vice versa. The problem and solution take into shape at the same time. Question and answer are the two sides of the same coin.
Designers in the exploration mode are trying to be responsible for external people – the users and customers - by solving the right problems well.
The goal of execution is to get something out of the door. It can be a new feature or a new product. The work is detail-oriented and usually has a fixed timetable. (In the Agile world, people are organized into scrum teams and work in sprints.) Designers may discover edge cases such as empty or error states. These cases are often not part of the core user flow, although experienced designers know how to identify them early on.
Designers deliver UI Spec and work with developers to fine tune the real product UI. They give time-to-market higher priority when making decisions. If necessary, they sacrifice UI fidelity for faster implementation. They think more of "how to fix it" than "is this right". (Finger crossed that they've already answered the latter question well.)
The hard part of design execution is knowing when and what to insist. The bar may vary for different kinds of feature, project, product, team and organization. It may vary from designer to designer too.
Designers often do not know all the technical pitfalls. Until developers code their design. Until users use their design. Whether it works only becomes clear during coding and after launch.
Designers in the execution mode are trying to be responsible for internal people – developers and project managers – by insisting and compromising on the right things.
Most teams under use the exploration role. Design is a journey of discovery. Why not bring the designers in at the beginning of the discovery journey?