Fluently NHibernate

logo

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.

Continue reading »

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:

  1. Feedback loop
  2. Feedback loop
  3. Feedback loop

Continue reading »

5 things I can do with my windows mobile phone that you can’t do with your iPhone

samsung_blackjack2
After playing with my friend's iPhone for awhile, and using the company phone for testing out our iPhone applications, I started to get really jealous of how cool it is, and how uncool my samsung windows mobile phone seems by comparison.
The more I used the iPhone, the more I got upset at my windows phone and started demanding "Why can't I do this on my phone?", and the more I found that there were apps out there that I didn't even know existed, as one of big problems with the windows platform is that its not easy to find good apps.
So here's my take on how to make your windows phone better, and what it can do for now that the iPhone can't do.

Continue reading »

Agile Development Improves ROI – But RFP Processes are Stuck in Waterfall.

niagararocks

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.

Continue reading »

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

death to ie6Anyone 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 »

Topics: ,

What to Look For in a Hosting Environment, Part 2: Backup Before You Go Too Far….

wile-e-coyote

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.

Grails: Custom Parent/Child Aware Tags

grails_logo

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 »

Topics: , ,

Ten Keys to Successful Software Development: #10: Tools and Infrastructure

precision_tools

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.

Continue reading »

Avoid the last minute security review

lock_med
Photo Credit:
Amagill under Creative Commons Attribution

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?

1927 Ford Model T tudor
Creative Commons License photo credit: dave_7

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 »

Remove/Cancel Bubbling for an Event in Flex3

fx_icon_special_100x100

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.

Continue reading »

Topics: , ,

The Five Deadly Sins of Software Development

southparksatan

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 »

What to Look for in a Hosting Environment: Part 1 - Monitoring

apache concurrent connectioins

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.

Continue reading »

About Pathfinder

Follow the Blog

    Get a monthly update on best practices for delivering successful software.

    Subscribe via email

      

    Subscribe via RSS      RSS icon

Topics

Search

WordPress

Comments about this site: info@pathf.com