The biggest issue with the request is that we don't really know what the customer really does. Sure, they're a small NGO, but do they do accounting, document storage, engineering, or classified work? All of these have specific requirements that change the loadout.
Second, how does the client interface with vendors and their clients? What data format do they need to output or accept? This, more than anything else, will determine software requirements. What proficiency are the users? If they are very skilled at a specific software title, your customer can spend money on that software to avoid retraining. If they are unskilled, a learning curve will occur regardless, so software selection can be made with capability and cost as primary factors.
From the answer to these and other questions, you can derive the desktop software loadout, data flow, and server requirements. From these in turn you can derive network architecture, desktop specifications, and server specifications. Note the process:
Regulations > Interface > Tasks > Users > Desktop OS and Software > Data Flow > Server OS and Software > Network > Server Spec. > Desktop Spec.
Now that we covered this, a little general info. To rack or not to rack. If you are installing new infrastructure and your budget allows, place all network and server infrastructure in a rack. Lay it out and lock it down. Track every wire, origin, destination, and termination. This will go a long way to saving time when you must look uber-proficient.
Desktop apps and operating system? Depends. If the client has never used a computer or is only marginally proficient, use Ubuntu 10.10 and save yourself an ungodly amount of labor. Just make sure that you nail down a service contract first. After training the users and some limited admin work, you will have little to do, if you rely on per hour support with a limited client base, you will go broke supporting Ubuntu, but your clients will be happy.
As far as the server goes, things are a little more flexible, unless there are some specific server side applications. Assuming there are not, I have has excellent results running Ubuntu Server. Even in a windows-centric organization using Exchange, I have run Ubuntu 10.10 server and Citadel Server replacing an aged exchange server, saved myself days and my client a truckload of money.
Network is fairly straightforward. For 20 users on a DSL backbone, a 10/100 switch is fine for office use unless there is heavy data access on the servers. If there is, or you are running VoIP, use gigabit. As a security solution, use Endian Community firewall on a dedicated machine, segmenting the system in a logical manner (guest access, trusted network, and VoIP for example).
The specifics of the server will depend on the client use. Some basics: I nearly always spec Dell or SuperMicro. Don't choose a 1U server unless you need the space. The vertical clearance is simply too tight, heat is an issue, and standard PC parts don't fit. This will increase the likelihood of a failure and increase the support costs. Exception to this is the Atom based servers from SuperMicro. If you don't need the processing horsepower of a Zeon (like a basic fileserver) and you are not running Windows Server, the Atom based 1U servers they make are an extremely cost effective solution.
Finally, what kind of desktop? User's choice. Whatever you do, do not deploy a laptop as a desktop and expect them to use the laptop keyboard. Between the ergonomics and construction, this will be a nightmare for all concerned. Use an external keyboard and mouse. The chief selling point of a laptop is the built in UPS you get for free (battery), but make sure the asset doesn't walk off. Another point, if you do deploy Linux on the desktop, use extreme caution and make sure the hardware is supported straight out of the box. I installed Ubuntu laptops as desktops at a client, using certified equipment (Dell Inspiron 1545 laptops) and the process was incredibly smooth. I had everything up and running before I would have gone through the setup screen for the pre-installed Seven.
Bottom line: You have a bit more homework to do, chatting with your client and his employees. Once this is done, you will have a much clearer roadmap to follow. At present, I would not bother with cloud deployment for a client this small. You will not save much, if anything, over the long haul. One thing consistently overlooked is the resources the client already pays for at their ISP. If they have an app that can be migrated to the ISP, considering bandwith, security, access, and technical issues, you can do this and loose a server, it's administration costs, upkeep, and depreciation.
Probably one of the slickest installations I ever did was install the network and server in a lockable 22U rack in the office area. Cooling came from a small air conditioner mounted in the basement below, ducted into the rack. Condensation was handled by the air duct forming a U-bend with a small pin hole in the bottom of the trap for drainage (you folks in more humid areas may not be able to get away with this...). The rack contained a shelf for ISP network gear, the firewall, 2 24 port switches, VoIP, File, and exchange servers, all punchdowns and cable management. The rack itself was used as a printer stand, so no real floor space was used, a very clean and slick installation. The cost of this installation was the selling point. My client had about $10K to spend on server and network infrastructure, and we managed to do it all for this, including my labor. About 6 months later, I did the same install in my own office.