going open source with small teams

36
Going Open Source with Small Teams Jamie Thomas Director of Software Development – VC3 Co-Founder - Cognito Forms

Upload: jamie-thomas

Post on 07-Apr-2017

173 views

Category:

Software


2 download

TRANSCRIPT

Page 1: Going open source with small teams

Going Open Source with Small TeamsJamie ThomasDirector of Software Development – VC3Co-Founder - Cognito Forms

Page 2: Going open source with small teams

Agenda Using Open Source When and why Licensing considerations

Creating Open Source When and why Contribution, not disruption Evangelism and

community building

Case Study 1 Afterthought – a post

compilation code weaver

Case Study 2 Exo – a comprehensive

platform for model-centric rules-based web development

Deep Dive Demo

Page 3: Going open source with small teams

Using Open SourceUse it intentionally, not on accident

Page 4: Going open source with small teams

WhenAlways an option

Always consider open source solutions when tackling both new and existing technology problems.

Remember that open source ?= good source, and in many cases commercial closed source or custom development is still the better option.

Page 5: Going open source with small teams

WhyTime is money

Open source software that sufficiently addresses a core need can save significant time both during initial development and ongoing maintenance.

Good open source technologies are written by subject matter experts.

Page 6: Going open source with small teams

LicensingOne important detail

Make sure the open source software is licensed in a way that makes sense for your business.

GPL = Open with Strings

LGPL, MIT, etc. = Open without Strings

Maintain copyright and license notices and keep a list of what you use.

Page 7: Going open source with small teams

Stuff We Use

Click icon to add picture

Just a taste of the dozens of open source projects and code snippets we leverage daily.

Electronic Signature

TinyMCE HTML Editor

DOM Manipulator

Spectrum Color Picker

Web Framework

Page 8: Going open source with small teams

Why We Don’t Use MoreWe have travelled a long way through uncharted seas.For those that come behind us the way will always be easier.

Page 9: Going open source with small teams

Creating Open SourceCreate what does not exist, and dare to share

Page 10: Going open source with small teams

WhenRarely an option

Unlike the use of open source software, there is rarely a compelling reason for a small team with deadlines to create open source software.

However, when your team has something special to share, seize the moment!

Page 11: Going open source with small teams

WhySomething unique and yet not central to the core business

Creating open source software changes mindsets, because you are sharing with the world, not just your cubemates.

Every team occasionally solves a new problem or an old problem in a unique way—give this as a gift back to the open source community.

Page 12: Going open source with small teams

Why NotSome things must be protected at all cost

Do not accidentally give away key business secrets.

Do not share junk. It should be your best work, not the stuff that did not make the cut.

Page 13: Going open source with small teams

Contribute, not DisruptFigure out how to share your work without disrupting the team and core objectives.

Page 14: Going open source with small teams

How we prevented distruption

When we decided to start contributing our work as open source, we selected GitHub as the public repository.

However, our entire team heavily uses Microsoft TFS, so we developed a tool that automatically promotes check-ins to TFS up to GitHub, including all details.

Automation is key

Page 15: Going open source with small teams

Building a Community is Hard Work!Failure is hard, but success is harder!

Page 16: Going open source with small teams

Case Study 1Afterthought

Page 17: Going open source with small teams

AfterthoughtAn open source .NET compile-time code amender

Page 18: Going open source with small teams

What is it?A big time-saver

Afterthought allows .NET developers to declaratively describe how to mutate compiled code to add additional behavior through IL injection and weaving.

Page 19: Going open source with small teams

How does it work?Fluent API for describing how to amend compiled .NET assemblies

Page 20: Going open source with small teams

Who uses it and why?

Afterthought leverages Microsoft’s open source CCI libraries (now part of the Roslyn compiler) to perform similar tasks as PostSharp.

VC3 uses Afterthought for almost all projects to support code-first pattern-based development.

Thousands of community users use Afterthought as a free alternative to PostSharp, which costs $500 per developer.

Page 21: Going open source with small teams

EvangelismAlmost none

We decided to create Afterthought as an open source alternative to PostSharp to avoid recurring upgrade expenses for essential technology.

We announced Afterthought and posted it to GitHub and Nuget and had almost an immediate following.

Page 22: Going open source with small teams

Community EngagementAfter months of actively supporting our community, we finally decided that we had to focus on our core products over developing features we did not actually need to support the open source community.

Page 23: Going open source with small teams

Future Plans

We know Afterthought meets a need.

We plan to release support for Visual Studio 2015 soon, including an updated Nuget package.

Long term, we plan to convert Afterthought into a Roslyn extension.

Page 24: Going open source with small teams

Case Study 2Exo

Page 25: Going open source with small teams

What is it?Exo is a server-side model-abstraction layer, a server-side rules engine, and a client-side model-centric rules-based web framework.

Page 26: Going open source with small teams

How does it work?Simply too much to describe in a single slide.

ExoModel provides an abstract, meta-data aware, wrapper of a concrete instance model. It could wrap EF objects, POCO’s or even dynamic types.

ExoRule is an powerful event-driven model-based rules engine.

ExoWeb brings all of this awesomeness to the browser.

Page 27: Going open source with small teams

Who uses it and why?

We use Exo extensively in all of our products and many of our consulting engagements.

Outside of VC3, no other organization currently uses Exo (that we know of).

Page 28: Going open source with small teams

EvangelismSignificant effort, but to no avail…

Unlike Afterthought, which solves a small problem and took off like wildfire, Exo is a sophisticated framework.

We created a dedicated website for Exo, and even created a demonstration app with step-by-step instructions.

Our conclusion is that successful open source projects solve small defined problems and are easy to search for.

Page 29: Going open source with small teams

Future PlansOne day…

The technologies in Exo are downright amazing, both for .NET and JavaScript developers (but especially for both together).

We want to eventually break our dependency on ASP.NET AJAX and move to something like Angular for templating, thus providing a clearer path for user adoption.

Page 30: Going open source with small teams

Deep Dive DemoCognito Forms Calculations

Page 31: Going open source with small teams

Christmas Tree Order FormModel-based calculations and rules highlight the power of our Exo framework.

Page 32: Going open source with small teams

Under the HoodSometimes it is hard to believe it is even possible that it works!

Calculations entered in Cognito Forms are sent to the server. The server builds the dynamic model (ExoModel) from the form definition. The expression parser builds an expression tree while supporting both intellisense and expression validation. The expressions dynamically compile and execute natively on the server as rules (ExoRule) and ExoWeb translates them to JavaScript to run on the client.

Page 33: Going open source with small teams

JSON Meta Data

"BulkDiscount": { "type": "Number", "isPersisted": false, "isCalculated": true, "index": 11, "format": "C", "label": "Bulk Discount", "rules": { "calculated": { "onChangeOf": ["ChristmasTrees{Height_Amount,Lights_Amount}"],

"calculate": "function(){var result = (((this ? this.get('ChristmasTrees') : null).map(function(p0) {return (((p0 ? p0.get('Height_Amount') : null) || 0) + ((p0 ? p0.get('Lights_Amount') : null) || 0)); }, this).reduce(function (p,c) { return p + c; }, 0) > 200) ? ((this ? this.get('ChristmasTrees') : null).map(function(p1) {return (((p1 ? p1.get('Height_Amount') : null) || 0) + ((p1 ? p1.get('Lights_Amount') : null) || 0)); }, this).reduce(function (p,c) { return p + c; }, 0) * -0.2) : 0);return isFinite(result) ? result : null; }.call(this)"

} } }

A simple property definition for ExoModel

Page 34: Going open source with small teams

Calculation Conversion

This=ChristmasTrees.Sum(Height_Amount + Lights_Amount) > 200 ? ChristmasTrees.Sum(Height_Amount + Lights_Amount) * -0.2 : 0

Becomes(((this ? this.get('ChristmasTrees') : null).map(function(p0) {return

(((p0 ? p0.get('Height_Amount') : null) || 0) + ((p0 ? p0.get('Lights_Amount') : null) || 0)); }, this).reduce(function (p,c) { return p + c; }, 0) > 200) ? ((this ? this.get('ChristmasTrees') :

null).map(function(p1) {return (((p1 ? p1.get('Height_Amount') : null) || 0) + ((p1 ? p1.get('Lights_Amount') : null) || 0)); }, this).reduce(function

(p,c) { return p + c; }, 0) * -0.2) : 0)

Page 35: Going open source with small teams

Millions use ExoWe just had to be sneaky about it!

Earlier I stated that only VC3 used Exo—that was a half truth.

As you can see, millions use Cognito Forms either to build or fill out custom online forms that leverage almost every feature of Exo, including dynamic modelling, advanced rules, expression processing, client templating, and rich validation.

Even if you efforts to share your projects go unnoticed, do not loose faith in the benefits of trying—it is definitely worth the investment!

Page 36: Going open source with small teams

ConclusionAny questions?

As in the case of Cognito Forms, enabling technologies can be open sourced without jeopardizing the success of an organization’s core business.

Find champions within your team with a passion to contribute and empower them to evangelize within your team and engage with the world.