Fluently NHibernate

Fluent NHibernate is an extension of the widely used and very popular NHibernate framework for Microsoft .NET. It is an open source framework that sits on top of the NHibernate layer and utilises all the core NHibernate methods. This framework provides an alternative to the standard XML based mappings (.hbm xml files) of NHibernate. It lets you define the NHibernate mappings in strongly typed and concise C# code. For those who are new to NHibernate, here is more information.
Topics: Data Mapper, Fluent, NHibernate, ORM
Agile Fundamentals: The Feedback Loop
When you improve a little each day, eventually big things occur. -- John Wooden
A few weeks ago I had a discussion with some colleagues on the adoption of Agile within large corporations. The consensus was that Agile was almost always adapted rather than adopted -- that is, companies exclude those practices that conflict with corporate culture, modify those that seem too impractical or wasteful, and sometimes substitute those internal practices that seem a decent and familiar substitute.
Various schools of Agile thought have different reactions to this adaptation, all negative. The XP folks particularly don't like it.
These [thirteen] practices support one another...and thus care should be taken when modifying any of them, or deciding not to include one or more of these practices in a project.
I agree that it definitely helps to follow a particular Agile approach closely in the beginning. Once you have the basics down, you can start to improvise. But it helps knowing the fundamental principle which, in my opinion, underlies all of the agile practices, no matter what the flavor. So, the first three commandments of Agile software development are:
- Feedback loop
- Feedback loop
- Feedback loop
Topics: agile, Extreme Programming, Feedback Loop
5 things I can do with my windows mobile phone that you can’t do with your iPhone

Topics: development, iPhone, tether, Windows, windows mobile
Agile Development Improves ROI – But RFP Processes are Stuck in Waterfall.

Agile development, when done right, results in better software are a lower cost. More and more companies are coming to this conclusion, but most are struggling with how to adjust their RFP and Governance processes to adapt.
The typical RFP process for custom software development is looking for a fixed bid, thinking this will provide budget protection and guarantee ROI. History clearly shows this is not true. Issuers expect to come within 10-20% of budget. Studies show that custom software costs can range from 50% under budget to 300% over budget. Why?
- Requirements are usually inadequate (though there is a very wide range if inadequacies.)
- The requirements produced generally have little to do with usability.
- Things change – requirements change, technology changes, the competition changes, etc.
- Too many features are built that aren’t used – studies show that 45% of features build under waterfall are never used.
Because all vendors know the above, they all take different approaches to responding to RFPs. Some try to provide a relatively accurate estimate by using historical patterns. This can be fairly accurate if they’re building an application they have done many times before using the same technologies.
Topics: Agile Development, rfp, waterfall
Death to IE6
“IE6 is the new Netscape 4. The hacks needed to support IE6 are increasingly viewed as excess freight. Like Netscape 4 in 2000, IE6 is perceived to be holding back the web.”
~ Jeff Zeldman, standards guru
Anyone who has worked with developing the presentation layer for web apps has become quite adept at creating workarounds in JS and CSS to try and give the user the same experience in IE6 that they’d have if they used an up-to-date browser. However, because of IE6's non-compliance with W3C Standards, a ridiculous amount of extra work (i.e., hacks) is needed in order to get the page to render correctly in this most outdated of browsers. And, as Dietrich mentioned in a previous post, the problem is that these deviations from the standard end up becoming the standard and increase the amount of time required to write and maintain code.
Continue reading »
What to Look For in a Hosting Environment, Part 2: Backup Before You Go Too Far….

This is part 2 of a multi part series on "What to Look for in a Hosting Environment." The first installment was on monitoring and the post can be found here.
As we all know backups should be an integral part of any companies IT disaster and recovery planning, and just because your applications are running at a 3rd party hosting facility does not mean that it's "not your problem." If it’s important to your business, its important to ensure that it fits your companies backup/recovery/archival strategy.
Most hosting companies provide backup services, and many of these can be tailored to your needs. Here’s how to ensure the hosting company can meet your backup needs, and the questions to ask to ensure that your needs can be met before the contract is signed.
When a hosting company says that they will provide backup services, ask them the following:
1. What does the standard backup provide? OS configuration as well as data (for full server recovery), or data only?
2. Are backups stored on site, or are they also stored off site (for full disaster recovery)?
3. Is there a dedicated backup network (so the backups cannot impact server/service network performance)?
4. How are your backups performed? Just file level backups, or are there application backups such as MySQL dumps or MSSQL backups?
5. How often are backups performed?
6. Can there be different snapshot frequencies for certain data types (e.g. database every 30 minutes?)
7. How many GB are included in the standard backup package? What is the cost of overage?
If you're using dedicated servers then regular backups using enterprise software such as Commvault or Veritas should be fine. A full server backup should be performed weekly, together with daily incremental backups (certain critical directories may need to be backed up on an hourly basis, or whatever schedule you're comfortable with). VMWare (or other virtualization) Virtual Servers have the additional benefit of backup via the integrated backup utility on the Virtual Host Server.
If you have large storage requirements then local backups by the hosting company could be expensive. One option for consideration (depending upon the security needs of the files to be backed up) is to use a cloud storage service (such as Amazon's S3) for these files, At only 15 cents per GB (plus data transfer fees) it's a very cost effective option for important information. We were able to realize large savings in this area for one of our clients by storing large image files (totaling around 15 TB per year) on Amazon's S3 service as the hosting company was charging over 50 cents per GB for a saving of over $5000 per month on backups alone.
As always we recommend redundant hardware (servers/storage devices) for all applications to minimize downtime in case of hardware failure, as no matter how good the backup strategy is, recovery of a large system will take time. And time is money. Your money.
Topics: backups, infrastructure, web hosting, web infrastructure
Grails: Custom Parent/Child Aware Tags

Recently, I needed to create a special tag in Grails which would render specific children in a way that is aware of their order. I wanted to stick entirely with markup (not passing an array to a tag), and also wanted to avoid putting lots of logic inside a .tag file. While it was possible to write a tag lib which first parsed the children in a "non-render" mode, I preferred a solution which did not require doing my own parsing before render. The solution I came up with isn't the most flexible, but it got the job done in a relatively clean way with minimal custom code.
The following is an example solution with the associated code and tests.
Continue reading »
Ten Keys to Successful Software Development: #10: Tools and Infrastructure
After last month's post on the five deadly sins of software development, I thought it would be good to write about how you can overcome those sins (present in every project) to successfully develop software. The list we use internally roughly parallels that of the Standish Chaos reports, and I've illustrated it with the patterns we use, as well as some antipatterns we've seen and experienced.
#10 on the list is Tools and Infrastructure:
Pattern: We use standard tools for our software development process. For example, every project uses a source code repository, we do continuous integration (hudson) and enforce test coverage as part of every build. Every project uses our wiki for in process definition and documentation. The tools have the benefit of being easy to use, of making communication between team members and clients easy and transparent. They have the benefit of enforcing/reinforcing what we consider important in our method (like test driven development, continuous integration, just in time specification and continuous feedback) and getting out of the way where too much structure is a hindrance.
Avoid the last minute security review
Security is hard
Security is often an after thought, slated towards the end of a project, or after some big issue has been discovered, but the nature of security functionality, rules, roles, auditing, etc make it hard to layer in to an existing codebase effectively.
Oh, and if the code base isn't sufficiently tested, you're in for a world of hurt.
If you are a developer that was just asked to 'do a quick security check and plug any holes', you are now in the difficult position of managing the expectation that a two-week security review means "we're covered". Be realistic about what you can accomplish, setting out some short-term and long-term goals.
Do More With Less. Start with a research 'Spike'
Instead of pushing for more time to be able to 'cover it all' (even though you have no idea what 'it all' is yet), it might be better to start with a shorter analysis phase, where you detail your findings, identify any trends, and include recommendations for process change. I've found that even the most demanding manager is appreciative and understanding when you ask for a small amount of time in order to produce a better estimate, than to just immediately demand more time without any evidence as to why.
Plan for success
With your analysis and recommendations in hand,
Continue reading »
Summer Software Development Internship
We're starting a software development summer internship in our Chicago office this year. If you're a college junior, senior or recent graduate who want to learn the agile/OO development ropes while developing really cool products and services and earning $20/hr per hour (you should pay for the privilege, right?), give the internship posting a look here.
Are You Building an Application or an Antique Web Framework?
A few years ago, a friend of mine asked me to help him estimating the conversion of a client/server application to the web. He came armed with a spreadsheet of features, I came armed with Ibuprofen and a red pen.
My usual approach to estimating involves breaking down the features into things that can be implemented by a pair of developers within a two week period. I give these a complexity factor of 1-5, then run them through an empirically derived formula to come up with an estimate in terms of person-iterations. (It's actually a little more complicated than that, but this is the main effort). Getting the count and size of these mini-features right is the key aspect of this technique. His spreadsheet had almost 300 features listed, and so we settled in for a day of fun.
Continue reading »
Topics: agile, Estimating, Requirements, UXD
Remove/Cancel Bubbling for an Event in Flex3
I recently had an issue in flex where I needed the click event for a component in an ItemRenderer to not bubble up to the parent list. Since the click event was being dispatched by Flex SDK code, I could not directly do this by passing false into the event's constructor. I had hoped to find a property I could set on the object, something like "clickBubbles", which I could set which would accomplish this.
Either that property doesn't exist or I could not find it. My solution was to basically hijack the event and send an impersonator in its place.
The Five Deadly Sins of Software Development
There's a list of deadly sins out there for just about anything related to information technology. Some have seven items, some have five, some even have nine. I haven't seen one with 21 deadly sins yet, but I won't be surprised if I do. Some focus on IT departments, some on unused software, some on agile software development, and quite a few on whatever they're trying to sell you.
We've seen a lot in our ten years of developing software at Pathfinder, and the list that rings truest is the shortest and pithiest, from the Standish Group:
- Ambition
- Arrogance
- Ignorance
- Fraudulence
- Abstinence
Each of these is best illustrated by example:
Continue reading »
Static Typing and the Paranoid Style of Programming
I have kind of a long standing rant-thing about static languages vs. dynamic languages, defensive programming, exceptions, and the best use of a developer's time and effort. It's been dormant for a while, but Sharad's comments on static v. dynamic, which I largely agree with, and this short piece by David McLaughlin on defensive programming gave me an itchy ranting finger.
Continue reading »
Topics: dynamic languages, static typing
What to Look for in a Hosting Environment: Part 1 - Monitoring
Having built and managed data center environments, provided hosting and managed 3rd party hosted solutions, I have seen a very broad spectrum of hosting options, and the benefits and pitfalls of each. Sometimes there are deals that appear to be too good to be true, and many times they are. Once you drill down into the details you can usually find where the corners have been cut to market to a certain budget.
These cuts and sacrifices are not necessarily a bad thing, but you need to ensure that you understand their impacts, and that if you are fine with them, you can save some $'s, but not necessarily avoid the headaches. You will find that you generally get what you pay for, and that if you make fully informed choices you will get the exact environment you need, for a reasonable budget.
Not many people have the time to drill down into the nitty gritty of each hosted solution, so I thought I would discuss what to look for, why it's important, and more importantly (to save your valuable time), what to ask in order tho get that information.
We’re going to look at five main areas to consider when evaluating a hosting environment:
1. Monitoring
2. Backup strategies
3. Hosting environment hardware and options
4. Security
5. Other topics of interest not covered by the above mentioned.
We’re not going to tackle cloud computing or specialized hosting, each of which deserve their own discussions.
Lets start with monitoring. I hate getting late night calls for support. I'd rather either foresee a problem coming at me and avoid it in the first place, or at least know exactly what the cause of the issue is if I am called. A good monitoring system will provide all this and much, much more.
Topics: hosting, monitoring, Software Development
About Pathfinder
Follow the Blog
-
Get a monthly update on best practices for delivering successful software.
Subscribe via email
Subscribe via RSS
Categories
Topics
Archives
- July 2009
- June 2009
- May 2009
- April 2009
- March 2009
- February 2009
- January 2009
- December 2008
- November 2008
- October 2008
- September 2008
- August 2008
- July 2008
- June 2008
- May 2008
- April 2008
- March 2008
- February 2008
- January 2008
- December 2007
- November 2007
- October 2007
- September 2007
- August 2007
- July 2007
- June 2007
- May 2007
- April 2007
- March 2007
- February 2007
- January 2007
- December 2006
- November 2006
- October 2006
- September 2006
- August 2006
- July 2006
- June 2006
- May 2006
- April 2006
- March 2006
Blogroll
Recent
- Elements of Testing Style
- Aesthetics and Web Design
- Asterisk-Java Testing with Groovy
- 3 Misuses of Code Comments
- Fluently NHibernate
- Digging a Hole and Covering it with Leaves — The Software Development Version
- The Importance of User Experience - Do You Understand It in Your Bones?
- Writing Your Own Protocol With NSURLProtocol
- What’s In Your Dock: iPhone edition
- Feature Fatigue





