UML and strict development is good, but it's important not to get caught up in it. While I agree with their usefulness in practical situations, one must always remember that the final aim to churn up good code - and good software CAN be designed and implemented using basic common sense and just applying your mind to the problem and breaking it up into smaller parts.
When you try to make something too systematic, you run the risk of unnecessarily complicating matters. It's for us to decide where to draw the line. Use the 'formal' tools on a broad level but don't limit yourself to those or try to adhere to them like they're sacrosanct. Keep the big picture in mind and let creativity gain the upper hand! At the same time, you can't just 'hack' your way through in large apps. It's for the individual to optimize based on his requirements.
As far as mono goes, I don't have experience with it but based on whatever little I've read/heard about it, here's my two cents anyway! I don't have a great feeling about mono. It might pick up, you never know but if I were to develop a software, I wouldn't use mono! It's hard to give precise reasons; it's just a general feeling you get.