Strictly speaking, ya means "already" and todavía means "still." All other usage patterns stem from this fundamental fact. This is what I always lean on when deciding what sounds natural.
As an example, ya lo tengo and todavía lo tengo have clear differences of meaning; one means that you now have it (or already have it) and the other means that you still have it. In the context of having it now, it would follow other sentences or circumstances in which the object wasn't in the speaker's possession and a change occurred leading to them having it. This is what I find most prevalent in the use of ya to mean now. It implies a more immediate or recent "now" than ahora. Todavía would never be used this way, since it implies a consistent state both in the past context and the current one.
Potential confusion can arise due to both ya and todavía potentially meaning "yet," but they tend to be semi-interchangeable, with slight variations in meaning - I find that ya has a sharper/more accusatory sound whereas todavía is more neutral or impatient, depending on intonation).
Ya no lo tengo.
No lo tengo todavía.
¿Ya no lo has hecho?
¿Todavía no lo has hecho?
Ya never means still in any context of which I'm aware.