Visionary software company in Charleston, still finding its technical footing
Pros
The collaboration at Blackbaud is pretty good. The product development group has recently shifted to an agile/SCRUM methodology, which seems to be augmenting quality and productivity. And it's more fun! The technical talent level is excellent across the organization. The new hires are top notch folks from Ga Tech and RIT, and the old hands are often Blackbaud lifers, which says something for the desirability of working at Blackbaud. Everyone works hard, but BB management recognizes the importance of work/life balance, so most days are 8:30 - 5:30 with a one hour lunch break. Blackbaud has an active outreach to the community. Every December the atrium overflows with employee-donated toys for the Toys for Tots drive. In March the atrium displays the works of Charleston artists. Daniel Island is a very nice little community with a few restaurants, a few small businesses, a hotel, and 2 large businesses (Blackbaud and BenefitFocus). Oh, and a tennis stadium that hosts the Family Circle Cup. The Charleston Battery semi-pro soccer team plays in a stadium that abuts the Blackbaud parking lot. The on-site Sodexho eating facility serves good food at very reasonable prices. The fitness center is well-equipped and free for employees. The benefits are good for both singles and families. One reviewer has panned the desirability of the health benefits package for families, but the parent/employees I know seem quite happy with what they've got. Development managers welcome new ideas for improving software quality and will give innovators room to experiment.
Cons
The latest product family ("Infinity") uses a home-grown XML-based metadata programming framework. While this might sound interesting, it is actually tedious and difficult. For example, to pass a parameter to a dialog constructor, you can't just change the constructor signature and the call statements. The Infinity framework calls the constructor, so the constructor definition is completely beyond your control. Instead you have to add a dictionary item to an "ExtraValues" property, and in some custom code you have to define a method overload where you find the ExtraValues array, then search the dictionary to find your string-expressed parameter, then convert it to the right data type. Programming in Infinity is filled with such instances of going around your elbow to get to your nose. In practice all the business logic ends up in a relational database and its stored procs/functions. The SQL language is good for expressing set logic, but it is rather clumsy for most domain functionality, business rules, and application flow. So the resulting product handles small modifications with ease (e.g., adding a custom field) and but is rather difficult to change in more significant ways. Since Blackbaud does encourage improvements (see my "best reasons" above), various folks are making small contributions that incrementally improve the experience of programming software on the Infinity platform. I expect the experience to continue to improve as time goes on.