For the past two years I've been programming in Max. I first became acquainted with Max in the late nineties through the work of Bob Ostertag. At the time I couldn't think of anything I would want to do with it.
However, as my writing progressed I became dissatisfied with making tracks in conventional DAW software, and also really wanted an electronic music system that could be played live. I worked extensively with the Yamaha RM1x. I loved the hardware interface, but the unit, amazing as it is, wasn't flexible enough. I tried Live, but it just didn't grab me, and I didn't want to be hunched over a laptop in performance. It was time to learn Max.
My first project is an interactive step sequencer called Ice. Sequencing seems to me to be the most neglected aspect of electronic music. So much of today's music is rigidly quantized to the grid.

Ice 0.1 "Variations"
The 0.1 version, which went by the code name Variations, had eight channels, each specialized for a different instrument (drum, bass, synth). It had no sequencer component, but it had some basic midi processors, a simple tempo detection algorithm, and a patch management system. It was playable, but changing patches was slow, and programming it was cumbersome.

Ice 0.2
For the 0.2 version, I standardized the channels, increasing their number to twelve, and added a sequencer, midi LFOs, pedal control, and a much more sophisticated patch management system based around the Max pattrstorage object. I separated the master controls and the channels into separate windows. At this point the software acquired the name Ice, becuase I thought what I was doing was pretty cool, but also that it might be the Titanic.
This was a more musical instrument, but patch programming was still a pain, and because sequencer data was saved along with patch data, it did not feel very improvisatory; in performance, you'd simply stand there switching patches. Switching patches was still sluggish. The channel interface was too crowded. Because Max's screen drawing can be excruciatingly slow, the multiple windows turned out to be a pain. Also, the architecture of the program was muddled, and debugging it was a special hell. However, I learned a great deal, not just about Max but also real-time programming issues in general, the most essential of which is that your computer does not have infinite capacity.

Ice 0.3
In the current version (0.3), I cut back to eight channels so everything could fit on one screen, and created my own interface objects, partly to make more efficient user of screen space, partly to get away from the utilitarian Max aesthetic, and partly to rid the interface of numbers, which can drive you crazy in electronic music.
I dropped sequence saving so that everything would be played fresh. After some research I figured out a more efficient architecture that is easier to debug and extend. I also added some special tricks to the sequencer and the LFOs that I won't reveal here. Finally I had an responsive and truly playable instrument! Now I just have to figure out how it works.
My interface to the program consists of a bass guitar with a midi pickup and a midi pedal. In performance I use the screen just for reference.
None of this would have been possible without Max's documentation, the best I have ever seen for any program, and the Cycling 74 forum, a treasure trove of tips, tricks for troubleshooting.
The best thing about Max is not that you can create what you want, but that in working with it it opens up possibilities you never imagined.