I have written game/rendering engines both for fun and professionally. I don't always have a use case for my engine, but when deciding on what features I'll develop, I focus on those that are needed in games like Half-Life or Deus Ex, because some day I want to be part of a team working on something like that. In the mean time, I sometimes do small indie games using my engine so I get to learn game development and not just engine development. Doing real games using your own engine is a good way to test its power.
When developing an engine, I do it in the perspective of the engine's user, and try to make everything as seamless as possible for them. First I write API calls into a tech demo, then I implement them, so it's kind of a top-down process for me.
I dont actually use apple tools at all. I am using a crossplatform API called marmalade which lets me code in C++ I am not sure what kind of profiling tools I can use with it as I cant even use gdebugger with it.
Xcode includes a handy tool called Instruments that can be used to find bottlenecks.
I don't think you can trust your UV coordinates to point in the right direction: deltaUV1 and deltaUV2 and area can have "bad" signs and any sign change determines whether your normal (implicit from the choice of tangent and bitangent) points towards the front or the back.
Can you explain how do you relate UV coordinates to triangle facing?