I bought "DIY CNC 1610 Mill Router Kit USB Desktop Metal Engraver PCB Milling Machine from ebay. It cost £100 including shipping and tax from a supplier within the UK.
Putting the kit together provided a few hours entertainment and it is good value for money, the components are worth more than the total price. There are many of these China sourced kits around; the 1610 refers to the X and Y dimensions in cm; there are larger models with the same components and it is useful to know the numbers like 3018, 2418, 3040 when searching.
There is a lot of information available, see the links below. The first reference  is unbeatable; much of what follows is what I did wrong in comparison.
My interest was in making printed circuit boards. The workflow is to design a PCB in KiCad, Eagle etc and export Gerber files. These are loaded into FlatCAM which produces a gcode file. Finally bCNC is used to send the gcode to the CNC machine.
I had a lot of trouble installing bCNC, due to a lack of understanding of the intricacies of Python library version handling. I learnt it is better to accept .exe self installing versions of Python programs. I never did get bCNC installed on Linux. A deeper understanding of Anaconda is worth learning - it allows multiple environments - so you can set up a virtual machine which has just the set of libraries a particular application needs.
The kit came with a CD which contained grblcontrol, probably unwisely I did not use that, the current version of this is called candle.
An accuracy of 0.1 mm seemed about right as a benchmark. I was going to use 0.1 mm 30 degree V bits (these are what comes with the kit). It should be obvious that if you're going to cut 0.1 mm grooves then the machine has to be built to 0.1 mm accuracy. Given that most of it is held together with bolts that are tightened by hand, this implies careful construction. It also probably implies that some of these machines are better than others - just due to tolerances in manufacture.
I designed a 3D printed bracket to attach a USB microscope. This consists of two very similar printed parts and two 50 mm m3 bolts. The microscope has some small grooves in it and the parts can have bumps added to slot into them. Typically these microscopes have two focus positions and it is possible to hold the microscope at one or the other by positioning the part with the bumps at the top or the bottom.
To put it another way, print the file below twice, once with the value of 'bump' set to zero. Possibly the grooves in different microscopes are not the same size or location and some adjustment will be needed.
To contribute to the versioning misery, this file needs a newer version of OpenSCAD.
Using the microscope I found the machine had backlash on the Y axis. There is an anti-backlash spring on both axes, but this will only work if the spring can overcome any resistance to movement in the mechanism.