I write scripts like large programs from scratch: decomposition, error handling, proper logging, unit testing, packaging, etc.
I wrote my own library with few useful modules, which is designed for strict mode (bash-modules on assembla), which I recommend to use even for trivial programs.
I have no problems with bash.
I have no trouble understanding how complex programs can be written in bash, but I have never understood why.
I hope, it is temporary problem. ;-)
In my scripts, I declare and describe command line interface of each script, so it is not hard to rewrite script in an other language when necessary. About 5% of my shell scripts were rewritten in an other language (Perl, Java, C). I had no problem with that.
Other developers and admins are happy with my software, I even got some internal awards.
My documentation/code ratio is about 7/4 (7 lines of comments and documentation per 4 lines of code), so it is easy to catch design errors - they are hard to describe in documentation in most cases. :-)
I am avoiding debugger as much as I can (lack of builtin debugger in bash helps me a lot :-)), so my software handles errors in most cases and error messages are _very_ descriptive.
I have no problems with bash, perl, C, Java, JavaScript, etc.