Five Books to help you successfully deliver a Flex application
“Even bad code can function. But if code isn’t clean, it can bring a development organization to its knees. Every year, countless hours and significant resources are lost because of poorly written code. But it doesn’t have to be that way”
I think the opening line of this book’s description about sums it up for me. Not only does readable code aid debugging, maintenance and on-boarding, but it’s discipline also forces the developer to think about the architectural design of the code he is writing. Coding by intent makes you think about every line of code you write, what value it is adding to the implementation, is it in the right place and is contributing to what the surrounding function or class claims is its motivation.
Refactoring: Improving the Design of Existing Code Although I suspect “when to refactor” is a much more hotly debated topic on most projects than how to refactor, when everyone is agreed on the “when” this book is surely the definitive reference on the “how and what” to refactor. Glue this book to Clean Code and you have the ultimate book on Software Craftsmanship
xUnit Test Patterns: Refactoring Test Code I am a big advocate of Test Driven Design and this book is a great reference book for unit testing. When pair-coding on unit tests, I often find that an approach can be less immediately agreed upon than with implementation code. In addition, I have found that developers vocabulary is more vague around various unit testing patterns or approaches. I find the author of this book has almost always tackled the unit test problem I am facing on a particular day and also defines a range of different unit test patterns which I find myself saying “oh that is what you call it”. If you want to take your Flex Unit skills to the next level then reading about “Test Doubles”, “Mocks”, “Stubs”, “inline fixture setup”, “Test Spies” and “behavioral vs. state verification” will help you. A very readable book.
Agile Estimating and Planning Agile is not the only way to deliver Flex applications, I know of several very successful high profile Flex applications which have been delivered using a waterfall approach. However, I feel that on the whole, in the fast paced world of business today, agile gives me the confidence that I am delivering what the customer needs on their launch date, not what they needed at the start of the project. Agile is the perfect way to keep close to the rawness of return on investment. As an aside, agile actually plays very well into the hands of user-centric application design. For me this book is a great introduction and ongoing reference to agile, particularly around the aspects of project management rather than developer skills ( such as TDD, pair-coding, etc ). If you are wondering how to manage scope on an agile project, how to track progress, how to motivate your team or how to capture requirements then this book is well worth the investment.
Domain-Driven Design: Tackling Complexity in the Heart of Software When I first started out in Flex development, approaches to client-side architecture (i.e. architecture of the Flex code) were very immature, as time went by and developers started migrating from other languages, which were more established such as Java, they found the need to organise their codebase in a better way and separate out concerns. Naturally people gravitated towards architectural patterns they were most familiar with, such as the J2EE and .NET patterns. Although this book is primarily about matching the design of the implementation to the domain, for me the most interesting bit is the definition of the various architectural patterns and strategies. I feel they are much more language/technology stack neutral and in many ways more appropriate to Flex than the J2EE patterns. In recent years a lot of emphasis in the Flex community has been put on various patterns around the presentation layer, such as MVC, presentation model, etc. Although these patterns are completely valid to discuss in the context of Flex development, I feel the downside of the emphasis on presentation layer is that the other ‘layers’ within the application are overlooked (e.g. domain and infrastructure). If you are not ready to invest in the book, there is a very readable free download which summarizes the fundamentals here
None of the books above even mention Adobe Flex, but that really is my point. Although an understanding of the technology stack is a very important factor in project success, in my opinion it comes nowhere near the importance of the people, processes and engineering disciplines that are in place.