82
Trisha Gee #GeeCON Java Driver Developer, 10gen @trisha_gee What do you mean, backwards compatibility? Thursday, 16 May 13

What do you mean, backwards compatibility?

Embed Size (px)

DESCRIPTION

The Java driver for MongoDB has been around almost as long as the NoSQL database itself. It was designed without some of the modern Java features we now take for granted, and the API might be easier with features like lambdas. The existing Java driver is extensively used, which leads to a tricky question: how do you create a new API that uses modern development patterns whilst retaining backwards compatibility? Your users are fundamental to the success of your business, you do not want to alienate them, break their systems or make it hard for them to migrate to the New World Order. In this presentation Trisha will share some of the pain experienced and solutions tried while creating a new Java driver for MongoDB.

Citation preview

Page 1: What do you mean, backwards compatibility?

Trisha Gee

#GeeCON

Java Driver Developer, 10gen@trisha_gee

What do you mean, backwards compatibility?

Thursday, 16 May 13

Page 2: What do you mean, backwards compatibility?

Design: translate the requirements in a specification that describes the global architecture and the functionality of the system.

http://homepages.cwi.nl/~paulk/patents/isnot/node4.htmlThursday, 16 May 13

Page 3: What do you mean, backwards compatibility?

Managing the Development of Large Software Systems - Dr Winston Royce

http://www.cs.umd.edu/class/spring2003/cmsc838p/Process/waterfall.pdf

Thursday, 16 May 13

Page 4: What do you mean, backwards compatibility?

Agile Design

<This Page Left Intentionally Blank>

Thursday, 16 May 13

Page 5: What do you mean, backwards compatibility?

Design is a Process, not a Document

Thursday, 16 May 13

Page 6: What do you mean, backwards compatibility?

What are you saying?

• Design is a journey, enjoy the ride

• There will be Monsters

• There will be Safe Houses

• There might not even be a destination...

Thursday, 16 May 13

Page 7: What do you mean, backwards compatibility?

Best Job Evar!!

Thursday, 16 May 13

Page 8: What do you mean, backwards compatibility?

We’re off!Thursday, 16 May 13

Page 9: What do you mean, backwards compatibility?

Backward CompatibilityThursday, 16 May 13

Page 10: What do you mean, backwards compatibility?

Lots of unknownsThursday, 16 May 13

Page 11: What do you mean, backwards compatibility?

Design GoalsThursday, 16 May 13

Page 12: What do you mean, backwards compatibility?

Yes, it’s a documentThursday, 16 May 13

Page 13: What do you mean, backwards compatibility?

Design Goals

• Consistency

• Cleaner design

• Intuitive API

• Sane Exception handling

• Test friendly

• Backwards compatible

Thursday, 16 May 13

Page 14: What do you mean, backwards compatibility?

Lack of consistencyThursday, 16 May 13

Page 15: What do you mean, backwards compatibility?

Coding StandardsThursday, 16 May 13

Page 16: What do you mean, backwards compatibility?

Zero Analysis ErrorsThursday, 16 May 13

Page 17: What do you mean, backwards compatibility?

No more argumentsThursday, 16 May 13

Page 18: What do you mean, backwards compatibility?

Design Goals

✓Consistency

• Cleaner design

• Intuitive API

• Sane Exception handling

• Test friendly

• Backwards compatible

Thursday, 16 May 13

Page 19: What do you mean, backwards compatibility?

UsersThursday, 16 May 13

Page 20: What do you mean, backwards compatibility?

Identify Our UsersThursday, 16 May 13

Page 21: What do you mean, backwards compatibility?

1. Java Developers

2. ODMs / other drivers / third parties

3. Contributors

Three Types Of Users

Thursday, 16 May 13

Page 22: What do you mean, backwards compatibility?

Java Developers

• Consistency

• Cleaner design

• Intuitive API

• Sane Exception handling

•Test friendly

•Backwards compatible

Thursday, 16 May 13

Page 23: What do you mean, backwards compatibility?

Third Party Libraries

•Consistency

•Cleaner design

• Intuitive API

• Sane Exception handling

•Test friendly

•Backwards compatible

Thursday, 16 May 13

Page 24: What do you mean, backwards compatibility?

Contributors

•Consistency

•Cleaner design

• Intuitive API

• Sane Exception handling

•Test friendly

• Backwards compatible

Thursday, 16 May 13

Page 25: What do you mean, backwards compatibility?

Users are our friendsThursday, 16 May 13

Page 26: What do you mean, backwards compatibility?

Backward CompatibilityThursday, 16 May 13

Page 27: What do you mean, backwards compatibility?

ArchitectureThursday, 16 May 13

Page 28: What do you mean, backwards compatibility?

UML, yuk!Thursday, 16 May 13

Page 29: What do you mean, backwards compatibility?

High Level ArchitectureThursday, 16 May 13

Page 30: What do you mean, backwards compatibility?

Scala DriverThursday, 16 May 13

Page 31: What do you mean, backwards compatibility?

Design Goals

• Consistency

✓Cleaner design

• Intuitive API

• Sane Exception handling

• Test friendly

• Backwards compatible

Thursday, 16 May 13

Page 32: What do you mean, backwards compatibility?

Design Goals

• Consistency

• Cleaner design

• Intuitive API

• Sane Exception handling

• Test friendly

•Backwards compatible

Thursday, 16 May 13

Page 33: What do you mean, backwards compatibility?

High Level ArchitectureThursday, 16 May 13

Page 34: What do you mean, backwards compatibility?

Option 1: WrappingThursday, 16 May 13

Page 35: What do you mean, backwards compatibility?

Option 2: ConnectingThursday, 16 May 13

Page 36: What do you mean, backwards compatibility?

Backward Compatibility?Thursday, 16 May 13

Page 37: What do you mean, backwards compatibility?

Tests PassThursday, 16 May 13

Page 38: What do you mean, backwards compatibility?

We win!Thursday, 16 May 13

Page 39: What do you mean, backwards compatibility?

Design Goals

• Consistency

• Cleaner design

• Intuitive API

• Sane Exception handling

• Test friendly

✓Backwards compatible

Thursday, 16 May 13

Page 40: What do you mean, backwards compatibility?

Not Dead Yet...Thursday, 16 May 13

Page 41: What do you mean, backwards compatibility?

The Public APIThursday, 16 May 13

Page 42: What do you mean, backwards compatibility?

Design Goals

• Consistency

• Cleaner design

• Intuitive API

• Sane Exception handling

• Test friendly

• Backwards compatible

Thursday, 16 May 13

Page 43: What do you mean, backwards compatibility?

Caveats

• It won’t look like this

• Haven’t decided consistent names yet

• Need something that suits all drivers

Thursday, 16 May 13

Page 44: What do you mean, backwards compatibility?

Find

Thursday, 16 May 13

Page 45: What do you mean, backwards compatibility?

Findcollection.find(query).skip(1000).limit(100);

Thursday, 16 May 13

Page 46: What do you mean, backwards compatibility?

Findcollection.find(query).skip(1000).limit(100);

collection.find(query).skip(1000).limit(100);

Thursday, 16 May 13

Page 47: What do you mean, backwards compatibility?

Find

Thursday, 16 May 13

Page 48: What do you mean, backwards compatibility?

Findcollection.find(query).skip(1000).limit(100);

collection.find(query).skip(1000).limit(100);

collection.find(query, fields);

Thursday, 16 May 13

Page 49: What do you mean, backwards compatibility?

Which One?Thursday, 16 May 13

Page 50: What do you mean, backwards compatibility?

Find

Thursday, 16 May 13

Page 51: What do you mean, backwards compatibility?

Findcollection.find(query).skip(1000).limit(100);

collection.find(query).skip(1000).limit(100);

collection.find(query, fields);

Thursday, 16 May 13

Page 52: What do you mean, backwards compatibility?

Findcollection.find(query).skip(1000).limit(100);

collection.find(query).skip(1000).limit(100);

collection.find(query, fields);

collection.find(query).select(fields);

Thursday, 16 May 13

Page 53: What do you mean, backwards compatibility?

Fewer DecisionsThursday, 16 May 13

Page 54: What do you mean, backwards compatibility?

“Cmd + space” friendlyThursday, 16 May 13

Page 55: What do you mean, backwards compatibility?

Findcollection.find(query).skip(1000).limit(100);

collection.find(query).skip(1000).limit(100);

collection.find(query, fields);

collection.find(query).select(fields);

Thursday, 16 May 13

Page 56: What do you mean, backwards compatibility?

Remove

Thursday, 16 May 13

Page 57: What do you mean, backwards compatibility?

Removecollection.remove(query);

Thursday, 16 May 13

Page 58: What do you mean, backwards compatibility?

Removecollection.remove(query);

collection.find(query).remove();

Thursday, 16 May 13

Page 59: What do you mean, backwards compatibility?

Find and Modify

Thursday, 16 May 13

Page 60: What do you mean, backwards compatibility?

Find and Modifycollection.findAndModify(query, update);

Thursday, 16 May 13

Page 61: What do you mean, backwards compatibility?

Find and Modifycollection.findAndModify(query, update);

collection.find(query).updateOneAndGet(update);

Thursday, 16 May 13

Page 62: What do you mean, backwards compatibility?

They hate me!Thursday, 16 May 13

Page 63: What do you mean, backwards compatibility?

Find and Modify

Thursday, 16 May 13

Page 64: What do you mean, backwards compatibility?

Find and Modifycollection.findAndModify(query, update);

collection.find(query) .updateOneAndGet(update);

collection.findAndModify(query, fields, sort, false, update, true, false);

Thursday, 16 May 13

Page 65: What do you mean, backwards compatibility?

Find and Modifycollection.findAndModify(query, update);

collection.find(query) .updateOneAndGet(update);

collection.findAndModify(query, fields, sort, false, update, true, false);

collection.find(query) .sort(sort) .updateOneAndGet(update);

Thursday, 16 May 13

Page 66: What do you mean, backwards compatibility?

Find and Modify

Thursday, 16 May 13

Page 67: What do you mean, backwards compatibility?

Find and Modifycollection.findAndModify(query, update);

collection.find(query) .updateOneAndGet(update);

collection.findAndModify(query, fields, sort, false, update, true, false);

collection.find(query) .sort(sort) .updateOneAndGet(update);

Thursday, 16 May 13

Page 68: What do you mean, backwards compatibility?

Find and Modifycollection.findAndModify(query, update);

collection.find(query) .updateOneAndGet(update);

collection.findAndModify(query, fields, sort, false, update, true, false);

collection.find(query) .sort(sort) .updateOneAndGet(update);

collection.find(query) .sort(sort) .getOneAndUpdate(update);

Thursday, 16 May 13

Page 69: What do you mean, backwards compatibility?

Lack of consistencyThursday, 16 May 13

Page 70: What do you mean, backwards compatibility?

Consistency at lastcollection.find(query).limit(10);

collection.find(query).limit(10).remove();

collection.find(query).sort(sortCriteria).getOne();

collection.find(query).sort(sortCriteria).remove();

collection.find(query).sort(sortCriteria).count();

Thursday, 16 May 13

Page 71: What do you mean, backwards compatibility?

Muerto del todo

✓Consistency

• Cleaner design

• Intuitive API

• Sane Exception handling

• Test friendly

• Backwards compatible

Thursday, 16 May 13

Page 72: What do you mean, backwards compatibility?

Design Goals

• Consistency

• Cleaner design

• Intuitive API...

• Sane Exception handling

• Test friendly

• Backwards compatible

Thursday, 16 May 13

Page 73: What do you mean, backwards compatibility?

Not Dead Yet!Thursday, 16 May 13

Page 74: What do you mean, backwards compatibility?

Tutorial/hack sessionThursday, 16 May 13

Page 75: What do you mean, backwards compatibility?

This talkThursday, 16 May 13

Page 76: What do you mean, backwards compatibility?

Design is a Process, not a Document

Thursday, 16 May 13

Page 77: What do you mean, backwards compatibility?

Q & A

Thursday, 16 May 13

Page 78: What do you mean, backwards compatibility?

1.Are you using the Java driver?

Thursday, 16 May 13

Page 79: What do you mean, backwards compatibility?

2. What do you like about it?

Thursday, 16 May 13

Page 80: What do you mean, backwards compatibility?

3. What are your pain points?

Thursday, 16 May 13

Page 81: What do you mean, backwards compatibility?

Design is a Process, not a Document

Thursday, 16 May 13

Page 82: What do you mean, backwards compatibility?

Your Questions

Thursday, 16 May 13