Let me start with an out-loud recap of this post: Agile is not something you can put on a bread nor is it “a certain path to success”.
It’s about STATE OF MIND.
If I had to describe the meaning of “Agile” to a new teammate I would say: Agile is a constant thinking about how we, AS A TEAM, can produce working features to our users with high quality within a short time-frame.
It’s really OK to provide only a subset of feature(s) in one sprint.
It’s really OK to leave SOME designing\architecture issues for later on as long as the high-level architecture is good enough (=you’re comfortable with it) to answer the big questions.
It’s really OK to implement only two REALLY-DONE-HIGH-QUALITY features in one sprint over four semi-working-not-demoable features.
The key here though is not really the practices, it’s about the big bullets(again, state of mind):
1). Produce value for your customers and adjust\adopt early.
2). Build a Team (self leadership).
These ideas are hard to implement and require special kind of people. Putting the Team in front of yourself is not a very job-secure attitude. The ability to help your teammates, shift tasks, taking ownership, critisize yourself and your teammates and getting better, produce high quality design, tests and code – all of it – requires versatile people with unique state of mind (and unique abilities, of course). It’s worth it. When things glue, it’s a real magic; Things start to get going by the Team, improvements and features starting to come from the developers\QA\Graphic Designer, adjustments are made on a regular basis, changes are welcome and productivity is celebrated.
You can feel something is going right.