It's an explanation by feeling rather than logic, but V+きる strikes me as if pushing a progress bar until the end, while V+つくす marking off all items in a list one by one. People use ～きる when you achieved 100% of an assumed entirety of work needed to call it completed, and ～つくす, when you leave none of ever imaginable targets.
That's why ～きる is typically associated with a goal, or "the point you don't have to continue" (especially in potential form ～きれる), and ～つくす against available resource, or "the point you have no means to continue". In another aspect, ～きる usually focuses on a single item or event, where ～つくす has multiple items in mind.
They sometimes have a complex interaction with the verb's meaning (besides many non-transparent idioms e.g. 乗り切る, 張り切る etc.) that I can't really make a sweeping summary, but hope you grasp a feel from examples below:
やりきる (do a single thing to the end)
やりつくす (do every possible thing; try every possible way)
食べきる (eat until 0% left / to do) ≈ 食べつくす (eat until nothing remains)
○ 疲れきる (so tired that HP down to 0)
× 疲れつくす (it's difficult to assume some kind of "fatigue" list)
一本の木を使いきる (use a piece of lumber completely)
一本の木を使いつくす (make full use (every possible application) of a piece of lumber)