- Everything needs to be lightning fast. You don't have time for 15 calls out to MySQL to figure out what you're going to do. NoSQL is your friend here.
- Relating to the above, implement a timing/profiling system that operates in production early on. It'll save your life more than you think.
- Keep track of budgets and ads served per advertiser in a way that's quickly accessible and can handle being shared. Hint: if you're going to run more than 1-2 campaigns, you don't have time to hit your DB every impression to get this.
- Make sure you fully understand cookie mechanics, especially relating to third-party cookies.
- The amount of events in online advertising is enormous compared to other fields, so make sure your reporting can scale horizontally.
- Understand how TCP and HTTP connections work and what stages they go through. You're going to have more connections from more different hosts than most normal load profiles, so optimizing your web stack and load balancing is critical.
Then you would have a web front end for admin.
Additional features, like confirming the widget in use by member sites would be another set of spidering servers.
IMO this is a very fun technical problem to solve. Lots of moving parts and opportunities to optimize .
Building an ad server that'll meet the needs of larger online advertisers can be a real pain, especially if it's just a single component of your business.
If I were you, I'd see if I couldn't just extend the open source version of OpenX with a custom plugin. If it turns out that you can't, well -- you can still learn a lot about ad servers by playing about with OpenX's code.
Some pointers on programming language choices for technology would be great.
Kleinsch you have some very interesting thoughts, is there any other way I could reach you and talk in more detail?
Is the serving going go be just ROS or is there going to be any matching/targeting involved?
If targeting is going to be there, will it be fixed (based on pre-set data values) or dynamic, algo-driven.
If it'll be algo based, you need to factor in the associated processing loads etc.
HTH