Hi ColdKeyboard,
What fun- can you build two and let me have one. 
Just been looking at your requirement and would like to ask a few questions:
- Will you want to fit just one LiIon/LiPo battery at a time?
- How do these full scale ranges, for charging and discharging, grab you: 100uA, 1mA, 10mA,100mA, 1A? Taking the 1A range as an example, a 12 bit ADC would have a resolution of 200uA.
- Just to clarify, would you be happy sourcing and programming a 3V6 MCU with a 12 bit ADC?.
- Can I assume an ADC input range of 0V to 3V6?
The plan is to make it, and same as with every other project I've done (for myself) make it open-source and open-hardware. So technically everyone will get one.

Yes, I would like to just test one battery at a time.
For charging and discharging, even 50uA to 500mA would be enough I guess. Reason for having such wide range is to make this tool useful in more than one case;
Basically by having a wide range from very low current to a reasonably high current, you can test how your battery would behave and how much juice you can get out of it
by emulating different states.
Also I plan on adding a charging circuit, so you can charge&discharge your battery, get the V-I curve for different ranges. One additional cool feature that I want to give
a try is connecting your outside load to the battery, and this tool would "record" how does your load behave over time and then you can store it in a profile and later
have it playback that profile to the battery under test. Basically have this tool emulate the load and keep repeating through cycles...

For the MCU, I would really like to use one of the STM32's or some similar micro that open-source community has already grabbed onto.
For example a very popular STM32F103 is dirt cheap (look for BluePil dev board), even the Nucleo board is dirt cheap, programmer clones are cheap... and it's a really
good MCU.
A key insight re: the ADC might be, that although you want to measure currents as low as a couple of uA, you don't need uA resolution when measuring in the hundreds of mA. In other words, 12 bits may be entirely adequate; you just need to use a logarithmic function in the analog domain. This could keep your costs and complexity down. Of course, you will need to plan for calibration and storing a look-up table, but that is probably a good idea anyway.
I'm a big fan of exploiting the STM32 ADCs to their full potential, but do be aware that the "effective number of bits" (ENOB), after accounting for noise and other defects, will be somewhere between 10 and 11. This is on the STM32L4 series which I am more familiar with. You can look it up under "ADC characteristics" in the datasheet for your part. Usually the ADC has built-in support for very crude oversampling (filter with an N-point boxcar -> sinc response, then decimate by N). As a rough estimate, you get one extra bit for every factor of four oversampling. This helps noise but not other issues like nonlinearity, so for DC measurement applications like yours one must be careful not to rely on it as a panacea.
You've hit the nail on the head! Maybe logarithmic scale with lookup tables is overkill (?) but how about having a circuit that would add/remove sense resistors
from the current sense path? Like analog switch that shorts or opens certain sense resistor in the string of sense resistors. Would you recommend going for an IC or
make it with discrete components?
I assume some multimeters use some kind of switching circuit to measure a value, if it's OL then switch to higher range...
To be honest I've found several IC's and by reading their specs you get to that "This should work... right?" point and since I know you guys here
come from all kinds of different backgrounds, built and worked on all kinds of projects; That's why I'm asking you for recommendations on best practices,
how to avoid some pitfalls that are not that obvious and how to do component selection (basically looking for feedback "I've used this IC and it's great for what
you are looking for or don't go for this IC, it looks great on paper but it's garbage")
Also thank you all for taking the time!
