One of the strengths of N2 is the API for defining types of content. The primary challange was creating a developer friendly* model that wouldn't require any database changes during development or deployment.
N2 uses OO inheritance as the primary way of defining the types of content available when the site is running. Further constraints and security are defined using attributes. These classes and their attributes are examined by the engine at runtime and used to control the behaviour of the CMS.
* Developer friendly: I shouldn't have to; repeat myself, building data access for each type of content, create input forms, abstaining from intellisense when exploring my own implementation or having to deal with magic strings.