Of late, I've been using OpenSCAD as my 3D modeler. Everything is script-based, you write "cube([5,10,1]);" in the edit window, and you get a block of those X, Y, and Z dimensions in the render window. You make cylinders the same way. With that, and operators to union() things together and difference() to subtract one from another, and a couple of extrusion operators, do enough of them and you get a steam locomotive:
Now, I do not recommend this program generally. Get a good interactive program like Fusion 360 if you're just starting out...
However, I think an approach like OpenSCAD has its benefits. The big one is that all the design decisions I made to model that locomotive are in a script somewhere. It's like reading the mouse move/clicks that do the same thing in an interactive program. I try to insert comments with the code to label them and sometimes describe what's going on, so there's that. Organizing the model was simply a directory hierarchy. I can use tools from my programming background to manage the model; if you're familiar with unix 'make', I use it to run OpenSCAD from the command line to re-render .stl files for the models that changed. Yeah, I'm losing people here, but it just fit my way of thinking developed in a long time writing computer programs.
Of late, I've been using OpenSCAD and my already-modeled locomotive parts in doing drawings for machining selected parts that need to be "functional", that is, support the moving parts of the mechanism, rather than the "decorative" parts like compressors, generators, the boiler and cab, etc. My current example is cutting the siderods, which run between the drivers to transmit the force from the piston. The part is to be cut from 0.02" brass, and I'm working on a milling procedure to step through the radii and traverses (doing this manually, no CNC). Making rounded segments that meet the rod is challenging, accommodating the 1/16" endmil diameter, but instead of doing all the trigonometry required to calculate the arcs I'm just modeling the end mill in OpenSCAD, rotating it around the radius and seeing where it ends up:
The two circles on the left on each side of the rod are the end mill positions after first being centered on the bearing, translated left to put the edge on the bearing OD, the rotating it around until it "touches" the rod. Given that my rotating table will be set to zero on the rod centerline, I can turn left to 138.2degrees and then right back to 221.8degrees to cut that arc.
I also made a "turns/ticks" function in OpenSCAD to take a dimension and calculate the handwheel turns and subsequent ticks for my Sherline to move that dimension. Those are the (turns/ticks) annotations to the right of the dimensions.
Now, I'm pretty sure you can do the same thing in any other CAD program worth it's salt, just a few things I came up with to make my machining go easier...