In July I got a free DevExpress DXperience suite licence. I was asked to write about my experiences with the software, if I found the time to do so. I think it is a fair deal. There is no way I can gain from this offer except by playing around with the software and seeing if it produces a net benefit. I can say that with the hourly rates common in enterprise application development, the time used to learn anything has a considerable opportunity cost. Putting time away to sharpen your saw should be a necessity, but in consulting environment it easily becomes a luxury. Time to learn is time away from short term customer work that brings the money in. Just try telling your boss that you are missing deadlines because of playing around with a new development tool!
Now, half a year has passed and I think I can say something of the tools I use daily, namely CodeRush and Refactor! Pro.
Installation and First Impressions
CodeRush and Refactor! Pro are the first things you see after installing the DevXpress toolkit. They are Visual Studio add-ins that are built upon a common framework called DXCore. There are also a few community plugins using this same framework. A normal user can mostly ignore this plumbing, but from time to time you'll see UI messages that explain how DXCore, not CodeRush, has done something. So, in principle there are three separate products involved: a free framework (DXCore), a commercial refactoring add-in (Refactor! Pro) and a commercial coding assistant add-in (CodeRush) that is always shipped with the Refactor! Pro. If you are not confused enough, there is also a separate free edition (CodeRush Xpress) and a specialiced Refactor editions for C++ and ASP.NET. To keep things simple, I'll will stick with the CodeRush name for the rest of this blog post.
The obvious tool to compare CodeRush against is the JetBrains ReSharper. Unfortunately, I don't have enough experience with ReSharper to say anything interesting (check this thread instead). I tried ReSharper about a year ago and it slowed down Visual Studio too much for my taste. Visual Basic IDE is demanding to begin with, with all the background compilation going on, and adding new extensions will definitely slow it down more. I don't have benchmarks available but I would presume that the amount of background processing is dependent on the lines of code in your solutions. Large solutions should be slower than small ones. Good news is that performance improvements have surely been the most highlighted feature in both CodeRush 9.2 (1) (2) and ReSharper 4.5.
Ultimately, you must compare the productivity gains of IDE extensions to the degradation of default IDE performance. This includes crashes, temporary hangs and general slowdown. I collected some haphazard data after installing CodeRush 9.1. on a machine with the following performance profile:

- VS2008 hangs for a few seconds but recovers. This occured repeatedly.
- VS2008 hangs permanently or crashes, restart required: happened 3 times during test
- VS2008 lost intellisense: did once
- VS2008 slows down: noticable, especially correction suggestions update slowly
(I must stress that I did have a few other Visual Studio add-ins during testing but the problems started only after installing CodeRush.)
In the end, for the same reasons that I couldn't use ReSharper, I had to give up using CodeRush 9.1. I need performance and reliability in Visual Studio to do my job adequately. After uninstalling Coderush, VS2008 performance improved but it still crashed every now and then, even with every other add-in uninstalled. It would be unjust to blame 3rd party tools for this, it had something to do with the VS2008 and the environment itself.
CodeRush 9.2
After CodeRush 9.2 became available I decided to try it again. This time with a fresh install of Windows 7 and VS2008. In a fresh system, CodeRush started to perform fast and reliably enough to be useful. I can't remember a single crash. This level of reliability is an absolute requirement for a productivity tool. Until this point, CodeRush had a negative impact on my productivity. I can only recommend that you have a solid Visual Studio environment before installing any add-ins.
Learning curve
Tools like CodeRush and ReSharper are only distractions if you don't learn to use them. And there is a learning curve involved. If found that this learning process started with general confusion, followed by curiosity and experimentation with the features. Finally, there was a kind of settle-down to a subset of features, with some features even disabled.
If I remember right, I first started using the refactoring suggestions right of the editor scroll bar that are similar to ones in ReSharper. These suggestions are mechanical, but they are useful in finding undisposed resources and redundant code. And you can customize them. For example, I didn't see it worthwhile to use String.Format in every concatenation and disabled the suggestion.
But the most visible features like refactoring suggestions are just the tip of an iceberg. I suggest taking a systematic approach to learning CodeRush. This means trying most of the features at least once and seeing what sticks in practice. This way you'll find the features you don't know to look for. I used the cheat sheet as a learning tool, trying one section per day while working on projects. The point is that learning CodeRush is a voluntary discovery process. There are tools to help you, like the Feature Statistics, but in the end you are free to use what you want.
Stats show that my top 5 features for the last week or so were:
- Intelliassist 274
- IntelliassistCycleForward 35
- Rename 25
- ShowReferences 24
- If .. Then 19
- CamelCaseLeft 11
I think I could use MarkerCollect (3) a lot more, but I don't really understand Selection Inversion (6), that is, inverting selected boolean expressions from true to false and vice versa. I think this feature is mostly invoked because of typos. It is easy to hit a wrong shortcut when using CodeRush, and in many cases it might be best to disable the invoked feature or at least remap its shortcut. Selection inversion is particularly dangerous, since it has a semantic effect invisible to the compiler. I have been burned once by an unintended inversion that ended up in the version control system.
Besides learning predefined shortcuts, you'll have to customize CodeRush to use it effectively. CodeRush allows you to customize practically everything. For example, default shortcut keybindings in international keyboards are not always the most natural ones, and you need to rebind them yourself. This effort pays off, since only those keybindings that stick are valuable.
One general impression is that CodeRush is more pleasant to use with C# than with VB. Clearly, C# programmers are a larger audience and also need some of the features more. But CodeRush has improved its VB support too, and it does add useful features like refactorings that are scarce in VB by default.
Keyboard Shortcuts
As mentioned before, there is a great cheat sheet available from the CodeRush inventor himself, Mark Miller. It is divided between Clipboard, Selection, Navigation, Code generation, Miscellaneous and Template shortcuts. Templates, or code snippets, are the most versatile part of the system. They also require the most memorizing, and it is better look at the other shortcuts first.
I have a gut feeling that most programmers are not that much into keyboard shortcuts. Sure, there are global shortcuts that everyone uses, and leveraging them is a good practice. For example, mapping F2 to rename an identifier in Visual Studio is a natural extension to a common Windows rename shortcut. But there is a flipside to this argument: shortcuts that interfere with the more common ones are harmful. For example, I dislike using Ctrl-W to increase a selection is VS because it interferes with using Ctrl-W to close windows and tabs elsewhere.
Even natural shortcuts like F2 can be dangerous. The danger is that you can accidentally rename a method when you really wanted to use another method. This is probably why F2 is disabled by default. But I encourage to enable it. F2 is a special time-saver in ASPX files, where server control identifiers get values like TextBox1 by default. In plain Visual Studio you have to use the property grid to globally change such a server control ID, because there is no rename feature similar to renaming variables in code. But with CodeRush, rename is performed uniformly in both aspx and code-behind.
Other favorites:
- Drop and collect marker. These are short-term bookmarks in code. Drop a marker with Alt-Home, go elsewhere in the code, come back to the marker with Esc.
- Clipboard history. More slots in VS clipboard. Unfortunately, its shortcut Ctrl+Shift+Insert is hard to use with Logitech keyboards that have this braindead large Delete key and hide the Insert key behind Fn. I suggest Ctrl-Shift-Delete.
- Camel Case navigation with Alt-Left and Alt-Right is cool, it works like the default word-wise navigation Ctrl-Left / Ctrl-Right. Selection with Shift.
- Show all references using Shift-F12 is better, but much slower than the default behavior.
Templates
Templates, or code snippets attached to keyboard shortcuts, were the last CodeRush feature I eventually discovered. The idea of code snippets is familiar, but it takes a time to get used to them in practice. Spacebar is the magic key in expanding templates, you type the shortcut and hit spacebar, and CodeRush fills in the template. This works great for 'If..Then' template because hitting spacebar after typing 'If' is automatic. For other templates, you have to do some work to remember the shortcut, like 'fe' for 'for each'. I think that ordinary IntelliSense assistance is mostly good enough, and you have to put in some conscious effort to get real benefits from using templates.
Final remarks
A lot of functionality is not mentioned here, mostly because I haven't learned enough yet. I don't use clipboard, wrapping selections, templates or refactorings that much. But the features that I use are valuable and most of the annoyances can be turned off.
An important thing to know is that the current version of CodeRush will be incompatible with Visual Studio 2010. Good news is that the CodeRush team is working on a DXCore rewrite that should work both in VS2008 and in VS2010.

