What arguments can I use to really drive the point home that it would
be better to use StoryQ, or at the very least apply the BDD
methodology?
"The customer wants it."
IMO you want to sell BDD to your customers/domain experts at least as much as to the development team.
BDD is a collaborative outside-in process where multiple stakeholders are involved. Benefits of BDD are not just for developers to automatically infer their test code from acceptance tests, they also lie in the creative cooperation that takes place between technical and business people to produce valuable, well-defined specifications of the system's intended behavior.
Giving customers/business analysts access to an interface where they can run each executable specification, control their status and see the progression in their implementation is generally much appreciated as well.
There's a presentation by Dan North on how you can sell BDD to the business :
http://skillsmatter.com/podcast/java-jee/how-to-sell-bdd-to-the-business
When I have to return to a section of code I've not worked on for a
while, I have difficulty remembering how it worked. I spend a lot of
time reviewing the header files for the relevant classes and reading
the comments I placed along the way in the source files.
Imagine how the poor guy who comes after you is going to feel -- he doesn't even have the benefit of having once known how your code works. Instead of trying to decipher your code, you should be reviewing the documentation that you wrote for the module in question. That documentation should offer a reasonably accurate view of what the module does any why. It's not "the module starts by initializing three arrays using a triple for loop...", but instead: "this module retrieves the data collected by the Fabulotron's main sensor, rearranges it into standard Neopolitan (chocolate, vanilla, strawberry) format, and delivers it to the Analysis module."
In a perfect world, you'd have a design document that sets out the various modules in the system and describes their respective responsibilities, and each of your modules could just refer back to that document to explain what they do: "This module provides the Fabulotron data collection service as detailed in section 4.8 of the design document: http://fabulotron.org/design/section4-8.html." If you don't have something like that, start writing down an overview of each module as you work on it. You don't need to write a book -- a few paragraphs are often enough to get you oriented.
When I introduce changes, sometimes I realize half-way that what I'm
trying to do will break things somewhere else (or worse, it shows up
only at runtime as a surprise). I revert and start doing it
differently, only to find out I neglected the influence on some other
component.
That might be an indication that your modules are too interconnected. The more independent you can make your modules/classes/units, the less likely it will be that you'll run into this kind of problem. Try to make the interfaces between modules as explicit as possible, and try to limit them to just what needs to be there. An interface is a contract -- if you know that some module lives up to its obligations as specified in the interface, you don't need to know anything else about it. That prevents changes in the module you're working on from affecting other modules.
I wish there was some "architecture diagram" where I could see how things get done
Using standard parts can help in this respect. C++ provides standard parts in the form of the Standard Template Library, and using those parts where appropriate lets you work at a higher level of abstraction. If you've written your own code to manage data structures like lists, you and those that follow you will constantly have to read the source to figure out what's going on. If you instead use standard parts provided by the STL, any C++ programmer will quickly be able to tell what your code is doing without digging into your data management routines.
Another kind of standard part comes from design patterns. They're standard concepts that can be used as a shorthand to explain how the relationship between two objects works.
Best Answer
In general userstories are requirements from the customer point of view that most of the time say what to implement (= features) but not how to do it (design, workflow).
If you want to create a new app out of nothing (greenfield-soulution) in a agile/scrum-like manner out of existing userstories i would suggest this workflow: