From time to time, I get requests to do CTO or project management jobs on a consulting basis. I can’t do them. I’m already the Executive Director of socialmarkets. However, I’d love to pass the buck (and the bucks) to my readers.
Before I just open up my recommendations to anyone though, I have to do a pretty thorough check on people who would be interested. What follows is my top 10 list of things you should know and practice as a nonprofit technology consultant for web application development. Be aware that this would be a different list if I was writing about network engineering.
- You know about Agile and waterfall methodologies and you can describe both their strengths and weaknesses. (And I’m praying and hoping you’re picking Agile for your preferred methodology.)
- You’ve worked in the nonprofit sector before (and no, working with a foundation doesn’t count, sorry philanthropoids).
- You know Rails or PHP. Nothing wrong with Python but at least try those two languages out. And by knowing Rails, I mean that you at least own the Pickaxe book and know who THE DAVID is. And by PHP, you at least know what a PEAR is and why you can’t eat one.
- You have documentation (screenshots, old proposals, manuals) laying around ready for perusal by any interested parties (like me).
- You were once a junior coder for at least a year. That’s right, working in the coal mines gives you character. At least that’s what Dad said when he sent you there.
- You have a blog that you keep up. And three month gaps between postings don’t count. GRRR.
- You read a ton of blogs. Show me your OPML. (And you better know what that means.)
- You use MS Project, Basecamp or Unfuddle or better yet, can describe the differences between all the packages.
- You can tell me how to keep developers happy. Believe me, not many people know how to do this.
- You love test-driven development and will train or hire coders to match that.
- And in true Non-Profit Tech Blog tradition, I hereby offer you the 11th thing you should know… You have a great knowledge of the liberal arts and subscribe to numerous arts and design magazines. Ugly code is always ugly but pretty code is at least eye candy for the users.
It’s not so bad — I’m not asking for a perfect match but if you’re hiring a consultant for web application development you should probably adopt these standards now. And no, I’m not advocating a particular technology, just a particular methodology. And you as a prospective employer, can take this with a grain of salt but I suggest that adoption of these points in your shop will get you much of the way towards a state-of-2005 approach to software development. Being two years behind isn’t bad, but 10 years — well, we’ll have to talk then.
So if you’re in the NYC area and want to gain a little bit of my mindshare when I’m asked for recommendations, hit me up at abenamer['at']nonprofittechblog.org.


I mostly agree, except for the Rails part. I think that there is an incredible amount of good and interesting projects that can be built on top of the current crop of popular open source platforms, written in PHP and Python. Rails is good for building interesting new stuff from scratch, but there aren’t a whole lot of nonprofits that need interesting new stuff built from scratch.
And you don’t need to subscribe to arts magazines to build pretty code.
Again, I’m pushing agile more so than Rails these days. I LOVE Rails — total fanboy. However, if I had to choose between PHP and Python, I’d choose Python. Putting on my IT director hat, I’d choose PHP. There are simply more PHP developers out there and they’re cheaper.
On the other hand, I find PHP code awfully opaque. And unlike Rails, TDD isn’t baked into the core feature set. In fact, Rails is past TDD and onto behavior-driven development. My developers for socialmarkets do BDD via Rspec. There’s no PHP or Python equivalent. My top 10 list was to bring people to 2005, not 2007. If you’re trying to get to a reasonably productive facsimile of state-of-the-art, you pick Rails. Generally speaking, I see much more interesting work done in Rails and it’s great for coders.
And arts magazines DO matter, I prefer well-rounded developers over myopic ones. I want people who can do high-level cross-fertilization of ideas. It’s a symptom of the creative mind. And ultimately, that’s what you want for everyone who works with you. Early Perl developers had strong liberal arts backgrounds and in fact, the Rails people do. In fact, if you take a look at the Stamen Design blog, you’ll see strong evidence of that. Even Steve Jobs cited liberal arts as the reason for computer typography. So I’m certainly not holding back on this issue, it’s really important if you want to produce GREAT code not just passable code.
I agree with you on the well-roundedness. But does it *have* to be arts magazines? How about music? History? Science?
Some of us wish we had the visual design talents that others have. I happen not to have been given that particular gene, so I am generally unable to generate good design.
I agree that design is pretty critical – but I think what’s most important is knowing good design when you see it, and being able to delegate design to others when you know it’s not your strong suit.
I still don’t agree that visual design skills are necessary to produce good code. Good code is code that is efficient, bug-free, has logical flow, and variables are well-named. In addition, it needs lots of comments. None of that takes visual design skills or talent, just care and thought.
OK, OK, liberal arts doesn’t necessarily mean arts magazines. It’s hard for me to let go on design because it’s so crucial for user interfaces. I’m not sure a subscription to Foreign Affairs or the Economist will help here. I’m definitely helpless at that sort of thing but I try to augment my poor design skills by reading i-D or looking at Communications Arts. It’s always good to at least know what the heck modern design looks like.
Ummm…you know Rails isn’t a language. Ruby is the language. Hence Ruby ON Rails. No offense, but this list sounds like you’re just spitting back techspeak that you heard somewhere else. Would you be able to hire yourself with these guidelines?
Yes, I know Rails is the framework. And I know Ruby is the language. Notice that I ask people in point number 3 to at least know the Pickaxe book which if you had bothered to check is the Programming book on Ruby as a language and not the Agile Web Development with Rails book. No offense, but do you check up on what people say before you criticize them?
As for the list, yes I would be able to hire myself but again, if you had read closely, I’m looking for people to substitute for me. I know it’s a blog post but take some time to read. We’re all friends here, aren’t we?
I’m sure you can always troll on Digg.
I’m 100% in agreement on the arts & design magazines. I’d also say that reading Edward Tufte is essential. Working code is useless if the interface drives people away. Good design is crucial for focusing attention, directing action and fostering emotional attachment.
Gee — I forgot about Tufte which is surprising since it’s on my “must buy for myself for Xmas” list. Haha. Yes…. Go Tufte Go!
Vey nice list, Allan. We’re very much on the same wavelength. I like agile, I like test-driven, I like frequent pair programming.
Because I think about this stuff so much, I thought I’d just throw in two points that you don’t mention, and a couple quibbles as well…
Missing point(1)
atterns. I think any development project manager should be conversant with the language around software design patterns and understand patterns like wrappers and adapters.
Missing point (2) : you don’t mention making sure the person uses a Version Control System of some sort. CVS, SubVersion, whatever. And the developer should have a clear philosphy around when code is committed, when it is branched, and so on. Working without version control is performing without a net.
Now my quibble. I’ve become very cautious around elevating any language or toolset to a Holy Grail position after watching the development community do this over and over again during the last 20 years. All your problems will be solved if you just port to C, C++, Visual Basic, Java, PHP, Ruby… I put very little emphasis on language – in fact when we hire, we do not require that the programmer have prior experience at all with the particular tools we are planning for them to use, we consider it an extra…. we are much more concerned with their general ability to program.
I agree with you wholeheartedly on all your points Michael. My favorite pattern for web development is MVC (model-view-controller) which also happens to be THE pattern for Ruby on Rails development.
I think it’s an interesting issue that in our industry source control and patterns are almost de rigeur at this point. No matter what methodology you use I would assume that those issues are already incorporated within most people’s toolsets but you’re right, they deserve mentioning.
As for languages… I’m officially language-agnostic. However, I find that certain languages haven’t had MVC frameworks until fairly recently so that’s why I tend to really dislike them. PHP has gotten theirs but I find Rails (and Ruby) a lot more intuitive. What’s funny is that I used to implement a crude version of MVC in “classic” ASP vbscript and after seeing MVC implemented in Rails, I was utterly sold.
My professional software development history is only half as long as yours Michael, but I’ve seen similar shifts myself. My particular history as a kid in high school coding Basic, Pascal, to c, to Perl, to ASP vbscript, to .NET C#, and now to Ruby has definitely taught me that programmers need to be able to retool every few years. So am I sold on Rails right now? Yes. Will I leave it if something better comes along? You betcha! There’s stuff coming down the road now that I find interesting like multi-paradigm programming languages (Oz) but for at least the next few years, I can guarantee that the languages that implement MVC best will become more and more dominant in Web programming and right now, that’s probably Rails, Python and PHP in that order.
You’re not specifying technology, only methodology – would you accept VB.NET skills from your consultant? I notice that MS Project did make the mix?
There are certain uses for VB.NET that are superior to anything out there short of C#. If you need to integrate Office documents in an intranet project (read Sharepoint) it’s probably second only to C# in its ability to do those integrations. If the IT shop I was hiring for was really sold on MS techs (and they are) like Sharepoint, Visual Studio and Active Directory (for single sign-on), then I’d definitely take a look. I guess I’m making an argument of C# as the premier .NET language but VBA and VB.NET make for a better pairing. Again, it really depends on the environment I’m hiring for.
It really depends on whether you can prove that your VB.NET skills work well in a test-driven and agile environment. If I were starting out with a new codebase, I’d honestly have to say no, I would not want a VB.NET consultant. I don’t really like the fact that VB.NET is harder to fit into an MVC pattern but it IS possible. Also, most of the newer and interesting libraries are written in PHP, Ruby and Python (in pretty much that order). That said, I’m not averse to hiring a VB.NET consultant in the context of an existing VB.NET codebase.
The only problem I foresee is whether or not there are a lot of VB.NET programmers with the same mindset. A cursory set of Google searches tell me that NUnit is available for .NET programmers so that’s probably a start. I haven’t been doing anything close to VB much less VB.NET for years so I’m completely out of touch with that community. It was a great technology for 1998 but I do think it’s been surpassed by open-source languages and their frameworks in the past few years.
BTW, this is comment #666 on the site! Mark of the beast, baby!!!
Thanks for the post! Very useful information. Here’s a tip from my team: we use Wrike as a basis for our project. It’s our collaboration platform and our project management software. It’s integrated with our inboxes, so we always stay tuned and work 2 times faster than before.
Here’s a link http://www.wrike.com