A computer implemented method for placing fasteners in a three dimensional product design, the computer implemented method comprising: identifying a fastener from a plurality of different fasteners to fasten a set of components (502,504) in a three dimensional product design using a policy to form a selected fastener, the policy defining whether the selected fastener is compatible with the three dimensional product design; receiving a set of points, each point of the set of points defining where on the set of components the selected fastener is desired to be placed, thereby forming a set of defined points (506, 508, 510, 512) on a surface of one component of the set of components; generating a set of locations in the set of components in the three dimensional product design using the set of defined points (506, 508, 510, 512) to form a set of defined locations, each defined location of the set of defined locations identifying a set of holes that need to be created through the set of components to fasten the set of components to each other; and placing the selected fastener into each defined location of the set of defined locations, wherein the receiving step comprises: receiving a user input defining the set of points on the set of components (502, 504) in the three dimensional product design to form the set of defined points (506, 508, 510, 512), wherein a defined point is a point at which the selected fastener is to be inserted, and wherein the generating step comprises: identifying a breakout point on the set of components (502, 504) for each defined point in the set of defined points (506, 508, 510, 512) to form a set of breakout points, wherein the breakout point is a particular point along a vector, originating from a defined point, at which the vector exits the set of components (502, 504); and forming the set of defined locations using the set of defined points (506, 508, 510, 512) and the set of breakout points. identifying a fastener from a plurality of different fasteners to fasten a set of components (502,504) in a three dimensional product design using a policy to form a selected fastener, the policy defining whether the selected fastener is compatible with the three dimensional product design; receiving a set of points, each point of the set of points defining where on the set of components the selected fastener is desired to be placed, thereby forming a set of defined points (506, 508, 510, 512) on a surface of one component of the set of components; generating a set of locations in the set of components in the three dimensional product design using the set of defined points (506, 508, 510, 512) to form a set of defined locations, each defined location of the set of defined locations identifying a set of holes that need to be created through the set of components to fasten the set of components to each other; and placing the selected fastener into each defined location of the set of defined locations, wherein the receiving step comprises: receiving a user input defining the set of points on the set of components (502, 504) in the three dimensional product design to form the set of defined points (506, 508, 510, 512), wherein a defined point is a point at which the selected fastener is to be inserted, and wherein the generating step comprises: identifying a breakout point on the set of components (502, 504) for each defined point in the set of defined points (506, 508, 510, 512) to form a set of breakout points, wherein the breakout point is a particular point along a vector, originating from a defined point, at which the vector exits the set of components (502, 504); and forming the set of defined locations using the set of defined points (506, 508, 510, 512) and the set of breakout points. identifying a breakout point on the set of components (502, 504) for each defined point in the set of defined points (506, 508, 510, 512) to form a set of breakout points, wherein the breakout point is a particular point along a vector, originating from a defined point, at which the vector exits the set of components (502, 504); and forming the set of defined locations using the set of defined points (506, 508, 510, 512) and the set of breakout points.