From what I have read coding a "vanilla chess engine" (c++ code for alpha-beta search over bitboard representation with simple hand-crafted evaluation function), will get you to 1500~1700 ELO on [CCRL 40/4](http://www.computerchess.org.uk/ccrl/404/).

Q1: What is the minimal set of ingredients needed to reach 2000 ELO ?

Q2: What is the minimal set of ingredient needed, if no opening or closing book is allowed ?

I have found [micro-max](http://home.hccnet.nl/h.g.muller/max-src2.html) and the development log of [zurichess](https://bitbucket.org/zurichess/zurichess/) as initial hints on how to reach ~2000 ELO. And I found [jazz engine](http://www.eglebbk.dds.nl/program/chess-index.html) as proof that 2000+ ELO can be reach without opening/ending books. However I would like to heard the opinion of others on the matter.

Thanks a lot for your suggestions.

(ps: here "simplest" is in "how long it takes to describe the algorithm", not necessarily in lines of codes)