Best practice for code in Aras Innovator 11 SP12

I have recently joined a team that uses Aras Innovator 11 SP12, so I'm quite new to this. I see that my predecessors have written some custom C# methods, but I am not happy with the way they are written. The formatting is not great (indentation etc.), which isn't surprising, given the code was probably typed right into the Innovator admin interface. A copy of the code exists in our version control system, but this is most likely just a copy and I am not even sure if it reflects the code currently running on the server. To me this looks like a less than ideal setup, so I am wondering what the recommended practice for custom code is. Ideally, all custom Innovator code would be in our versioning control system and deployed to the Innovator server from a build server. But what's the best way to debug code that is under active development? I would like to use Visual Studio with Resharper etc. for development, with external logging libraries like Serilog etc. etc. Or would it make sense to implement a custom webservice that implements the actual logic and only have very short methods in Innovator that interact with the webservice? How do you guys do this?