Summer of NHibernate Feedback: this isn’t real!
During my production of the Summer of NHibernate screencast series, I have routinely received questions from viewers that tend to want me to dig into more real-world issues that come into play in the development of a non-demo/non-sample application. Since the focus of the code samples in the NHibernate screencasts was to demonstrate and reinforce the concepts of NHibernate in each of the installments, I didn’t apply much focus to the immediate applicability of the sample code to a real-world application. Questions like "how would you structure your solution?", "where is the best place for unit tests?", "shouldn’t you refactor that behavior into a separate class?", etc., etc. were intentionally not part of the focus of this series.
But the repeated requests for details in this regard has got me to thinking: would there be value in another more broadly-focused screencast series that actually took the viewer through our process of architecting and engineering a more real-world application?
The Premise
As Summer gradually turns into Autumn (yes, this is a northern-hemispheric-centric view of the world) I am tentatively planning a follow-up series that focuses on demonstrating core Agile values and understanding the basic agile techniques and practices (for .NET developers, of course) that reinforce these values. The tentative context for this demonstration would be the building of a real-world application that would allow me to demonstrate for viewers how the ALT.NET principles guide our application development process in some detail. Just as with the Summer of NHibernate series, this screencast series would have broad value for our own internal training needs as well as benefiting the larger community.
I am tentatively planning on reviving the long-dead SkillsPortal project that I had begun the development process on some time ago using ASP.NET webforms and an MVP architecture and starting completely over again from scratch using ASP.NET MVC and DDD tactics to rework the project from the beginning.
A little bit different from the Summer of NHibernate where we took a deep dive into a single technology over the course of the entire series, this series is envisioned as a toe-in-the-water style introduction to the technology elements that are often employed to support an agile approach to development in the .NET ecosystem. There would certainly be code samples and practical development skills to be derived from viewing these sessions, but their primary focus would be on concepts rather than an explicit detailed how-to in the same way as the Summer of NHibernate series was designed to impart explicit coding knowledge into viewers.
The goal of this screencast series would be to lay the groundwork for better understanding the principles and values that define ALT.NET and lead to the adoption of the practices that we will investigate.
The Challenges
There are some significant challenges with this proposed approach of recording screencasts that attempt to document the development of an entire end-to-end project. The first one is simply the sheer scale of the effort involved in any real-world project. Let’s assume (for the sake of argument) that it takes 40-60 hours to build the application (this seems reasonable for the fairly simple application that I have in mind). There are two choices in this case: either every hour of work is recorded (resulting in 40 + hours of content!) or just the highlights are recorded similar in concept to what Rob Conery has been doing with his ASP.NET MVC Storefront series where he fades the video in and out a lot to eliminate our need to see some of the details of his process.
Personally, I think Rob is doing a tremendously valuable thing with his series and I have been learning plenty about the ASP.NET MVC framework from watching him work (and reading the MEAP version of the upcoming ASP.NET MVC In Action book), but IMHO I find the ‘jumps’ between content to be jarring and it makes his workflow generally harder for me to follow. As such, my first inclination is to not repeat that pattern in this new proposed content and instead to capture everything in my process, but I have to ask the question: would anyone actually watch even 20 hours of video where someone designs and builds a real-world application in real-time (never mind 40-60 hours)?
I’m interested in feedback from people re: the perceived value of this process and ideas about ways to get the right level of detail captured in the content without boring everyone with too much minutiae (or having the process take 40 weeks ).
Draft Topic Outline
Tentatively dubbed ‘Autumn of Agile’, the draft curriculum for this next series is as follows…
Agile Values and Practices Overview
- The Agile Manifesto (one of the worst names for something anyone could ever have chosen)
- The challenges of traditional software development methodologies
- Understanding Agile as a response to traditional methodologies
Basic OO Design Principles (lost in TLA hell
)
- Agile Value: flexible, adaptable software
- SRP/SoC (Single-Responsibility Principle/Separation-of-Concerns)
- DIP (Dependency-Inversion-Principle)
- LSP (Liskov-Substitution-Principle)
- OCP (Open-Closed-Principle)
- ISP (Interface-Segregation-Principle)
- DRY (Don’t-Repeat-Yourself)
- YAGNI (You-Aren’t-Gonna-Need-It); ok, not exactly a TLA but still pretty important
- LRM (Last-Responsible-Moment)
- RDP (Reversibility-of-Decision-Principle)
Design Patterns In Action
- Agile Value: stand on the shoulders of those who came before us, learn from them, and don’t repeat their mistakes
- — your favorite design pattern here
—
Unit Testing Basics
- Agile Value: tight feedback loop for each individual developer in isolation
- Tools and Technologies
- Structuring tests
- Positive and Negative Tests
- Code Coverage Tools
Mock Objects
- Agile Value: decoupled software components must be tested in isolation
- Mocks, Stubs, TestDoubles, and Fakes
- RhinoMocks syntax options
TDD
- Agile Value: consider your design from the perspective of its consumers
- Intent, methodology, values, and approach
Project File/Folder Organization
- Agile Value: team flexibility to move from project to project
- Consistency of Project Folder Structure
- Segregation of Project Artifacts
- Structure to support CI efforts/build automation
Source Control Basics
- Agile Value: central storage and versioning of software project artifacts
- Exclusive Checkout Model
- Edit-Merge-Commit Model
- Trunks and Branches
- Labeling/Tagging
- Commit Comments!
Continuous Integration / Build Automation
- Agile Value: tight feedback loop for the entire development team
- CruiseControl.NET
- CIFactory
Agile Project Planning Principles
- Agile Value: plan enough to manage yourselves, don’t overplan too far in advance
- Features
- User Stories
- Tasks
- Releases
- Iterations
- Burn-Down
- Velocity
Overview of Domain Driven Design Core Concepts
- Agile Value: solve the problem and then select a technology
- Entities
- Value Objects
- Services
- Repositories
- Aggregate Roots
- Bounded Contexts
Structure
This outline isn’t in any temporal order (e.g., the topics will be addressed as they come up in the proposed development of the SkillsPortal project, rather than as the organized and structured outline shown above). Instead, this is just a list of the topics that I would want to ensure were hit upon in the design and development process that would be captured in the screencasts.
I am soliciting feedback from people re: the level of interest in such a curriculum before I decide how to proceed (if at all). What are reader’s thoughts about this outline — too broad? too general? This would be tremendously valuable for me and I can’t wait? Nobody in their right mind would ever want to watch all this?
Please feel free to chime in about your feelings on the above list; feedback here will be my guide re: how (if at all) I would proceed with this proposed series.
All of that sounds great. I am looking forward to some good episodes on DDD since there are few that go beyond basics. Thanks for all your hard work putting these together. Keep up the good work ;).
Personally i feel Rob’s approach is great. I think even you should follow the same way of doing things for the upcoming series and leave some of the tasks for the viewers to figure out( Explanation is needed though π ). 40 episodes is quite long to follow and the viewers may trail off.
Looking forward to this, I second the DDD episodes, as this is fairly new to me
Thanks for all the hard work
@Vinay:
Yes, I wasn’t really *ever* considering doing a 40-episode screencast since its likely *I* would trail off while recording so many installments π
40 episondes was just an example of the obvious reason why recording *everything* just doesn’t make sense and is clearly unworkable.
I guess I agree that Rob’s approach is the only really workable one given that the alternative is the 40-installment screencast series this I think is simply not worth considering recording *or* watching.
Perhaps the present style of the Summer of NHibernate series where a brief intro ppt that lays out the concepts that each installment will touch on would be the way to go.
Other thougths appreciated~!
Great idea.. but I think you shouldn’t just do it on your own. Firstly because of the workload, 40hrs will become 400hrs or you’ll feel your skimming too much and secondly as a lot of “agile” topics involve working as a team.
Also a Silverlight/Prism/NH project would be cool π
This will be cool but 40hrs is too long. You can just outline important points, and in the code download you add explanatory comments on issue that can’t be covered in the screen cast.
I’ll will be looking forward to it.
Thanks
@Lookman:
Yes, I agree that 40 hours is too long for you *and* for me π
I appreciate the suggestions about how to balance length with content and I will take that all under advisement should I decide to embark on this effort.
@Michael:
Your point about how Agile makes more sense in the context of a team (at least a team of > 1 !) is a good one.
Are you volunteering to participate? π
I would watch this. I thought I knew what I was doing, sort of, until I attended one of J.P. Boodhoo’s .NET “boot camps” last year. I have been trying to get my head around most of what you list in your tentative outline ever since.
Also, I am the only programmer where I work. This makes it impossible for me to pair program with anyone, but integrating the other principles and methods has been beneficial. I would be grateful to learn how other small teams do this.
@Ray:
I think there are definitely alot of parallels between what I understand JP is doing with his .NET bootcamps (nothin’ but .NET); I’d be interested in understanding more from you re: what you liked and didn’t like about his approach so that I can tool what I’m considering doing to be both not just a rinse-and-repeat of what he did as well as to not reproduce any perceived downside you found with his approach.
If you want, hit me direct via e-mail if you’d prefer to continue this convo out-of-band.
@sbohlen:
Sure steve, I’d be happy to help. In all seriousness though if you want to do something ‘real’ then an OSS project with a small team would be ideal. I don’t think you’d have any trouble finding volunteers.
Your summer of NHibernate screencasting model is the best; small theory in the beginning, a lengthy coding session, and some more overview at the end. It will be better if asp.net MVC is the center and making TDD and design patterns around it. Learning the first steps are the hardest part and you definitely got the power to cover it in lucid style. Wish you all the best and looks forward to the autumn series
@Ray & Steve
Off course, I’ll respect the privacy of you guys ;-), but I’d be _very_ interested hearing about JP’s .NET bootcamp. I’m seen a few of his, imho excellent, screencasts on DNR-TV, so don’t expect me to complain if you continue your conversation in the comments of this post π
One
Although I concede that a 40 hour ‘live’ screencast is not practical (though I’d probably watch it) I really like watching a work in progress.
Steve: ‘.. and if I run this test now, you’ll see it pass’.
Steve: ‘….’
Steve: ‘Hmmm, why did it fail ?’
Steve: ‘???’
Steve: ‘Oh, I see, what I forgot to do was …….’
In a pre-recorded (edited) screencast, these gotchas are usually not covered.
Maybe you could do a ‘pre-screencast’ release, in which you publish a presentation and the source code for the actual screencast which will be published a few days later.
This will give the audience an opportunity to familiarize themselves with the material you’re going to cover and therefor you should be able to reduce the ‘screen time’.
One
P.S. And yes, this does sound like homework π
@One:
I wasn’t trying to subvert Ray’s interest in continuing the conversation here on the blog π but more trying to ensure that everyone else wasn’t bored/distracted by the possibly off-topic comment thread.
I Ray would rather share his Nothin’ but .NET experiences and feedback with me right here, I’m certainly not interested in stifling that.
Re: the more ‘real’ and somewhat unrehearsed nature of the SoNH series vs. what you might get from a more ‘snippet-based’, non-real-time approach for the next series, how about I promise not to practice first? These things already take enough time to produce as it is! π
@Steve
>>
… but more trying to ensure that everyone else wasnβt bored/distracted by the possibly off-topic comment thread.
<<
It’s your blog, you call the shots here π
<>
Well, if it took you 42 practice runs to deliver episode 13 …. π then I say, don’t bother …
(Sorry, couldn’t resist that one π )
One
Does this mean we’re heading for a “Winter of Windsor”? π
Incidentally, I noticed you mention CruiseControl.NET and CIFactory, and wondered if you’d come across:
http://www.jetbrains.com/teamcity/
As a colleague mentioned it to me recently, and afterwards I read some blog posts that seemed very enthusiastic about it.
And finally, at the risk of getting back on topic, it sounds like a good idea to me, if you could “squeeze” it all into a reasonable number of episodes – Perhaps you could do two parallel sets of episodes, where one of the sets is a “behind the scenes” kind of thing, as that way people could watch the details if they want, or skip them if they don’t. (looking at the draft curriculum, there’s plenty of material to cover)
>>
Does this mean weβre heading for a βWinter of Windsorβ?
<<
Yes, off course. What makes you think otherwise ? π
Steve’s next wedding anniversary is not due for another year, so he has plenty of spare time π
One
@One:
We might indeed be headed for a “Winter of Windsor” although that sort of depends on whether my wife divorces me before then due to all the time I spend planning and recording screencasts.
Though I guess the positive might be that if she does divorce me over that, it just leaves me more time to plan and record screencasts π
@James:
I have also heard nice things about TeamCity, but since it doesn’t support our choice of SCC, Vault (http://www.sourcegear.com/vault), its sort of out for us (for the forseeable future).
[…] I’ll hope to see you again during the hopefully soon-to-start Autumn of Agile […]
I have recently started watching the Summer of NHibernate and am hugely impressed with what you’ve done. I am pretty new to all this; I’ve not written any Unit Tests, have only recently started to use SVN etc. But this course is showing me how it SHOULD be done and I applaud that.
This is like having a hands on lesson with a master for me, so I would really love a new Autumn of Agile to help fill in some of the background and help me get started with an ALT.NET approach in earnest.
Great stuff π Unfortunately for me, I have 2 seasons here – hot sun or rain π
Hi Steve,
You’re brilliant! Cool Stuff!
I’m just wondering why you will use MVC for this episode “Autumn of Agile” rather than MVP.
I thought MVP is doing MVC properly as quoted by JP. Do you favor MVC for MVP?
Any reasons?
Thanks,
Edgar
Steve I think this would be an invaluable contribution to the community. I am also in agreement with you on the approach Rob is taking, I love the content but often am pulled out of my ‘AH-HA!’ moment too quickly when the cut forward happens.
However I also agree with you that 40+ hours of content (with many hours of practice for each) would be a huge time sink on your part.
I wonder if recorded while you’re coding, you could break each of your work sessions up into descernable ~1-1.5 hour units. Then dub over the audio track with a slightly more polished speech, using the original as a guide. That way you’re just annotating the work we see you doing. I wonder if that would cut down your workload or add to it. Even then it’d be 80 hours of work at a minimum. Maybe a simpler example application?
Steve,
Overall, I have found Rob’s series great and informative, but I had the same difficulties with his jumps between units of work. For someone following along (and coding along), that translates to a lot of guess work and extra time filling in the gaps. Yes, I know the code was available for download, but wasn’t writing the code the whole point. My vote goes for showing everything. And yes, I think it’s an awesome idea!
How about Anti-patterns? Like over applying design patterns π
@Edgar:
My reasoning behind using MVC (the framework and the pattern) is that my testing and trials with the new ASP.NET MVC framework have demonstrated to me that for the things that I value in my projects (testability, separation of concerns, modularity, etc.) the ASP.NET MVC framework is probably going to be my web-dev platform of choice over the WebForms model when working on .NET for the web.
Even with the several well-documented ways to (reasonably) implement the MVP pattern in WebForms (as demonstrated in the beginnings of the ‘Inside the Sausage Factory’ blog posts I did way back when), its still somewhat of a ‘hack’ where you are finding yourself ‘fighting’ the framework instead of using it as it was intended.
If I were to do a WebForms project in the future, I would definitely follow the MVP pattern as its a more ‘natural’ fit to the WebForms model than attempting MVC in WebForms. But now that there is a reasonable alternative platform (ASP.NET MVC) its near-certain that this will be my approach-of-choice for future .NET web-work, all other things being equal.
I get the feeling based on feedback from most others that share my values system around software design that they are of the same mind (e.g., default approach would be ASP.NET MVC unless other factors dictate WebForms with an MVP pattern) and so I think this is the platform to which I intend to dedicate my attention in the future.
Does that help?
[…] taking advantage of the Agile nature of the project to use Agile to plan my screencasts too; I know more or less what I want to cover, but don’t have a good handle on exactly when it will come up in the process of the […]
[…] next installment of the Autumn of Agile screencast series is available now for immediate download from the Autumn of Agile […]
Honestly, I prefer the style of NHibernate sessions than the Rob Conery’s sessions. What you can do is to mix the both styles. When you write mechanical and no explanation needed you can pop up the code. But I like your explanations, they are clear and understandable. When I watched Rob Conery’s sessions I often paused to see what code he is testing because this happens:
1. Lets write a test – 0,5 seconds
2. Pop up the code – 0,2 seconds
3. Lets test it (and while saying that he push the button and the test results appear 0,8 seconds)
4. And it works 0,5 seconds.
Totally 2 seconds, go back then pause, not always but I did not enjoy his sessions like yours. Thats all. Its funny for example when you test and it fails, then comes “Wooooow, lets see what happened here”.
First the wife, then the sessions!!!
I have just started to follow your NHibernate series and I must say that I found them very very informative and detailed. Most screen casts weave in and out and leave you floundering. Yours is the best.
My response to your query would be to make them detailed and continous as the NHibernate one’s.
many thanks for your contribution which made me NHibernated in a way I would not have thought possible.
Once again Many Thanks
Great screen casts on NHibernate, good work!
Has anyone had any problems following parts of the screen casts?
This test fails after putting the order object collection in place.
[failure] NHibernateDataProviderTests.SetUp.CanThrowExecptionOnConcurrencyViolationOnDelete.TearDown
‘(Illegal attempt to associate a collection with two open sessions)
If anyone has an idea please let me know.
Thanks.
@Dave:
This is a part of the screencast that behaves a bit differently if you are running NHibernate 2.x instead of 1.2 (as the screencasts were based on). Given your reported issue, I’m going to bet that you are using Nhib 2.x instead of the 1.2 release.
In the final installment, one of the things that I cover is migrating the samples from 1.2 to 2.x and in the process I expose most of the (major) breaking changes in 2.x (I believe you have hit one of them here).
Revert your copy of my sample code back to NHibernate 1.2 and it will work for you. Then in the final installment (15?) it will become clear why you are seeing what you are seeing as I expose the differences in concurrency session lifetime that is the root of the cause of your issue.
I’m pretty certain this is the source of your trouble, but if you are in fact already using NHibernate 1.2 and still experiencing the issue, I invite you to report to me exactly which code sample download (which screencast session) you started with and I will inspect it specifically to see if I can puzzle out what might be wrong with it.
I would watch it if:
You would create 30 minute screencasts, maximum. That makes it reasonable to watch during lunch break or at the end of my day.
You would use subversion hosting for the code, AND
You would create tags that correspond to each show (and that contains buildable Visual Studio solutions)
The code should not require a SQL Server database, I would prefer SQLite or SQL Server Compact.
Doing it that way gives us maximum flexibility to A. watch whenever we have 30 minutes to spare, B. follow in our own leisure since we can always check out a known version of the code and C. get up and running with the code in 5 minutes or less.
You’d get huge bonus points if you makethe case for separation of concerns and actually implement that alternative UI, or alternative ORM data access layer. That would really make the point of it clear.
To this end you could ask the viewers to create such alternatives and give them commit rights to a branch in subversion. If someone delivers this, then you could do an interlude where you interview the giest and he/she shows how he implemented a different Data Access layer without touching the rest of the stack.
Hope you like my ideas, looking forward to your effort.
@Mike:
Great suggestions, thanks~!
Let’s take these one at a time…
1) 30 minutes maximum length
Yeah, not gonna happen π The first several installments are now complete and released and I’m getting good feedback when they are LONGER (if you can believe it) so 30 minutes per is just going to be unattainable. But they ARE recorded videos, so my recommedation is to just hit STOP after the first 30 minutes and then resume the next 30 minutes during the following day’s lunch. In this way, you’re getting nearly an entire week’s worth of lunches covered every week π
2)Subversion hosting
We use SourceGear VAULT for our source control internally and I will continue to use that for the work in the screencasts since they are first and foremost for internal consumption by other Microdesk employees. As I think I have mentioned before, anyone should be able to follow along with the the concepts that I’m using for SCC since the general process is the same regardless of what SCC tools you might choose to use. Once the whole thing (series) is complete, hosting everything on Google Code or something similar based on SVN is an interesting idea that I may in fact pursue. Good thought.
3) SCC tags that correspond to each show
Not really needed since the source for each installment is already available as a separate download along with the screencast video (in a buildable VS solution already as you suggest). As mentioned in 2) above, if I do eventually decide to host on Google Code (or sim) I will indeed follow your suggestion and tag each checkin with the installment number/title/whatever so people can ‘go back’ to an episode. Great idea.
4) Code should not require a SQL Server dsatabase
This is actually sort of already addressed. I am using NHibernate for data-access and this has drivers for both SQL Compact Ed. and SQLLite. Since my code is designed to drive the creation of the DB schema based on the NHibernate mapping files and then use my unit test framework to load test data from the persisted XML file(s), there really isn’t any dependency in the code on any specific DB per-se (and this is also why I don’t bother to distribute a DB backup file or script for creating a DB, etc. with any of the code downloads — they just aren’t necessary to build and work with the DB of your choice). Change the connection strings, modify the dialect in the hibernate.cfg.xml file(s) and you are off an running with just about any DB you wanted (SQLLite, Oracle, even MS Access…not recommended, of course!).
5) I actually LOVE the idea of inviting others to participate by implementing alternate DAL or UI layers atop the same over-arching application — what a great idea! This may be a bit premature as the application is still in a pretty nascent stage right now, but after a bit more of it starts to solidify, this starts to be a bit more reasonable and I will indeed explore the viability of such an idea.
Thanks for the feedback and I hope I’ve satisfactorily addressed most of your suggestions; keep ’em coming and I hope you decide to watch even if I may not be addressing your specific issues in exactly the manner you were hoping for~!
Great, thanks for your reply. Looking forward to the series, I’m sure it will be great. Lunch will never be the same π
You are doing the community a real service with this series. Many thanks!!
[…] – Coming Soon: "Autumn Of Agile" β¦? saved by jeroencoumans2008-11-15 – OO Design and PHP saved by dividebynought2008-11-09 – some facts […]
Hi, just watching your NHibernate videos and they are fantastic.
Just as fantastic as the draft curriculum of Autumn of Agile. Those would be a !seriously good! set of videos to watch.
As Don above says yout doing a real service to the community.
Maybe you try having some non-scary Omen type music at the start of those videos. π
Thank you Steve.
@Derek:
Thanks for the feedback (and the significant donation!); both are very much appreciated~!
Autumn of Agile (of course) has already been started and after a little hiatus to get some personal and professional things under control, expect more to come near-term.
And re: the scary music, hopefully the intro theme for Autumn of Agile is less frightening to people although I also overheard someone on twitter suggest that the intro for that one made them think that Jack Bauer (or 24) was going to leap out of their computer so I guess ‘you can please some of the people some of the time…’ π
-Steve B.
Autumn of Agile (Part I) torrent is posted. It says 0 seeders, though both of my machines are currently seeding. Would love confirmation that others (outside my network) can grab it….
I’m seeing 2 seeders. However, I’m unable to connect to them.
One
@Duncan
I don’t know what you did, but it worked π Downloading right now.
One
@Duncan
I already downloaded (and watched) all episodes, so there’s not much in it for me π but hopefully it’ll benefit others.
If you’d create a torrent for the next installment, I’d be happy to seed it.
One
@people_not_smarter_than_me π
If anyone is interested, the torrent is available at:
http://www.mininova.org/tor/2454045
One
Hi Bohlen,
I would say, the Best screencast I have ever seen, Thanks and Congratulations.
Still watching Summer of NHibernate and downloading Autumn of Agile.
Well regarding the scary music, I liked it not because it is scary but because its nice, it is the famous Carl Orff’s O Fortuna.
Hi Steve,
Thank you for both Summer of NHibernate and Autumn of Agile. Your Summer of NHibernate series provided excellent coverage of NHiberate and helped me create a DAL and test bed using NHibernate and SQLite for an application I’ve been working on. I really appreciate your efforts! As a new programmer these video’s have been invaluable to me. I have just started the Autumn of Agile series and sincerely hope you are able to finish. I would be willing to help if you needed any from a somewhat novice programmer.
Tim
@Tim:
Thanks for the positive feedback — I’m glad you’re able to find value in the content.
Its looking like Autumn of Agile will resume in early July this year (yes, I know its no longer Autumn π ) so look for it pretty soon.
Thanks,
-Steve B.
[…] (on avait bien eu Summer Of NHibernate l’an dernier), a moins que le projet “Autumn of Agile” n’arrive en Juillet Billet original publié sur les blogs de […]