business natural languages development in ruby

125
Business Natural Language (BNL) Jay Fields http://jayfields.com

Upload: consanfrancisco123

Post on 15-May-2015

884 views

Category:

Technology


2 download

TRANSCRIPT

Page 1: Business Natural Languages Development In Ruby

Business Natural Language (BNL)

Jay Fieldshttp://jayfields.com

Page 2: Business Natural Languages Development In Ruby

What?

Page 3: Business Natural Languages Development In Ruby

Domain Specific Language (DSL)

Page 4: Business Natural Languages Development In Ruby

Why?

Page 5: Business Natural Languages Development In Ruby

Business

DeveloperDeveloper

QA

Page 6: Business Natural Languages Development In Ruby

Business

DeveloperDeveloper

QA

Page 7: Business Natural Languages Development In Ruby

Business

DeveloperDeveloper

QA

Page 8: Business Natural Languages Development In Ruby

Business

DeveloperDeveloper

QA

Page 9: Business Natural Languages Development In Ruby

Business

DeveloperDeveloper

QA

Page 10: Business Natural Languages Development In Ruby

Business

DeveloperDeveloper

QA

Page 11: Business Natural Languages Development In Ruby

Business

Developer

DSL

Page 12: Business Natural Languages Development In Ruby

Why?

Page 13: Business Natural Languages Development In Ruby

Benefits

Page 14: Business Natural Languages Development In Ruby

Benefits

Managers

-Improve efficiency by distributing workload

Page 15: Business Natural Languages Development In Ruby

Benefits

Page 16: Business Natural Languages Development In Ruby

Benefits

Developers

-Technical Decisions not Business Details

Page 17: Business Natural Languages Development In Ruby

Benefits

Page 18: Business Natural Languages Development In Ruby

Benefits

Business

-Time to market

Page 19: Business Natural Languages Development In Ruby

BNL == DSL

Page 20: Business Natural Languages Development In Ruby

BNL == DSL#=> false

Page 21: Business Natural Languages Development In Ruby

Domain Specific Languages

Page 22: Business Natural Languages Development In Ruby

Ruby on RailsCobolXMLetc...

Excel MacrosYACC

Rake

Domain Specific Languages

Page 23: Business Natural Languages Development In Ruby

So?

Page 24: Business Natural Languages Development In Ruby

Concise or Verbose?

Page 25: Business Natural Languages Development In Ruby

Concise or Verbose?

Who’s the author?

Page 26: Business Natural Languages Development In Ruby

“DSL” is too general

Page 27: Business Natural Languages Development In Ruby

BNL < DSL

Page 28: Business Natural Languages Development In Ruby

BNL < DSL#=> true

Page 29: Business Natural Languages Development In Ruby

The Difference

Page 30: Business Natural Languages Development In Ruby

The Difference

•Natural Language

Page 31: Business Natural Languages Development In Ruby

The Difference

•Natural Language

•Written by the Business

- subject matter experts

Page 32: Business Natural Languages Development In Ruby

Today

Page 33: Business Natural Languages Development In Ruby

Award 2 points if the fare class is A, C, D, J, Z

Specification

Page 34: Business Natural Languages Development In Ruby

account.award 2.points if [A, C, D, J, Z].include? fare

Code

Page 35: Business Natural Languages Development In Ruby

Award 2 points if the fare class is A, C, D, J, Z

Specification

Page 36: Business Natural Languages Development In Ruby

Award 2 points if the fare class is A, C, D, J, Z

Code

Page 37: Business Natural Languages Development In Ruby

How?

Page 38: Business Natural Languages Development In Ruby

External

Page 39: Business Natural Languages Development In Ruby

Award 2 points if the fare class is A, C, D, J, Z

Page 40: Business Natural Languages Development In Ruby

Award 2 points if the fare class is A, C, D, J, Z

account.award 2.points if [A, C, D, J, Z].include? fare

Page 41: Business Natural Languages Development In Ruby

the ifpoints2Award A, C, D, J, Z isclassfare

Page 42: Business Natural Languages Development In Ruby

•account.instance_eval

the ifpoints2Award A, C, D, J, Z isclassfare

Page 43: Business Natural Languages Development In Ruby

•rule.gsub /^A/, “a”

the ifpoints2Award A, C, D, J, Z isclassfare

Page 44: Business Natural Languages Development In Ruby

•rule.gsub /^A/, “a”

the ifpoints2 A, C, D, J, Z isclassfare

award

Page 45: Business Natural Languages Development In Ruby

•rule.gsub /\d /, ‘\1.’

the ifpoints2 A, C, D, J, Z isclassfare

award

Page 46: Business Natural Languages Development In Ruby

•rule.gsub /\d /, ‘\1.’

the ifpoints2 A, C, D, J, Z isclassfare

award .

Page 47: Business Natural Languages Development In Ruby

•rule.gsub /class/, ‘’

the ifpoints2 A, C, D, J, Z isclassfare

award .

Page 48: Business Natural Languages Development In Ruby

•rule.gsub /class/, ‘’

the ifpoints2 A, C, D, J, Z isfare

award .

Page 49: Business Natural Languages Development In Ruby

•rule.gsub /([A-Z, ]+)/, '[\1]'

the ifpoints2 A, C, D, J, Z isfare

award .

Page 50: Business Natural Languages Development In Ruby

•rule.gsub /([A-Z, ]+)/, '[\1]'

the ifpoints2 A, C, D, J, Z isfare

award .[ ]

Page 51: Business Natural Languages Development In Ruby

•rule.gsub /if the ([a-z]+) is(\[.+\])/, 'if \2.include? \1'

the ifpoints2 A, C, D, J, Z isfare

award .[ ]

Page 52: Business Natural Languages Development In Ruby

•rule.gsub /if the ([a-z]+) is(\[.+\])/, 'if \2.include? \1'

ifpoints2award .[ A, C, D, J, Z].include? fare

Page 53: Business Natural Languages Development In Ruby

[ A, C, D, J, Z].include? fare ifpoints2award .

Page 54: Business Natural Languages Development In Ruby

[ A, C, D, J, Z].include? fare ifpoints2award .

account.award 2.points if [A, C, D, J, Z].include? fare

Page 55: Business Natural Languages Development In Ruby

[ A, C, D, J, Z].include? fare ifpoints2award .

account.award 2.points if [A, C, D, J, Z].include? fare

Specification == Code

Page 56: Business Natural Languages Development In Ruby

Code, Specification,

Page 57: Business Natural Languages Development In Ruby

Code, Specification,and Documentation

Page 58: Business Natural Languages Development In Ruby

Readable Documentation

Page 59: Business Natural Languages Development In Ruby

Descriptive And Maintainable

Phrases (DAMP)

Page 60: Business Natural Languages Development In Ruby

Maintainable

Page 61: Business Natural Languages Development In Ruby

Readable by any subject matter

expert

Page 62: Business Natural Languages Development In Ruby

Who is the user?

Page 63: Business Natural Languages Development In Ruby

Training

Page 64: Business Natural Languages Development In Ruby

Training

Page 65: Business Natural Languages Development In Ruby

Statistics

Page 66: Business Natural Languages Development In Ruby

Business

DeveloperDeveloper

QA

Page 67: Business Natural Languages Development In Ruby

Business

DeveloperDeveloper

QA

Page 68: Business Natural Languages Development In Ruby

Business

DeveloperDeveloper

QA

Page 69: Business Natural Languages Development In Ruby

Business

Developer

BNL

Page 70: Business Natural Languages Development In Ruby

"A change that used to take 3-4 days now takes

about 10 minutes."

Page 71: Business Natural Languages Development In Ruby

Example

Page 72: Business Natural Languages Development In Ruby

First Class /Business Class /

BusinessFirstA, C, D, J, R, Z 2

Full Fare Economy Class Y, H 2

Economy Class K, M, N, B, O, V, U

1

Page 73: Business Natural Languages Development In Ruby
Page 74: Business Natural Languages Development In Ruby

Business Logic

Page 75: Business Natural Languages Development In Ruby
Page 76: Business Natural Languages Development In Ruby

BNL?

Page 77: Business Natural Languages Development In Ruby

No

Page 78: Business Natural Languages Development In Ruby

No

Page 79: Business Natural Languages Development In Ruby

BNL

When the fare class is A, C, D, J, R, or Z then award 2 points

Page 80: Business Natural Languages Development In Ruby

When the fare class is A, C, D, J, R, or Z then award 2

points

Page 81: Business Natural Languages Development In Ruby

When the fare class is A, C, D, J, R, or Z then award 2

points

When A, C, D, J, R, or Z then award 2 points

rule.gsub /the fare class is /, ‘’

Page 82: Business Natural Languages Development In Ruby

When A, C, D, J, R, or Z then award 2 points

Page 83: Business Natural Languages Development In Ruby

When A, C, D, J, R, or Z then award 2 points

when A, C, D, J, R, or Z then award 2 points

rule.gsub /^W/, ‘w’

Page 84: Business Natural Languages Development In Ruby

when A, C, D, J, R, or Z then award 2 points

Page 85: Business Natural Languages Development In Ruby

when A, C, D, J, R, or Z then award 2 points

when A, C, D, J, R, Z then award 2 points

rule.gsub / or /, ‘ ’

Page 86: Business Natural Languages Development In Ruby

when A, C, D, J, R, Z then award 2 points

Page 87: Business Natural Languages Development In Ruby

when A, C, D, J, R, Z then award 2 points

when A, C, D, J, R, Z then 2 points

rule.gsub /award /, ‘’

Page 88: Business Natural Languages Development In Ruby

when A, C, D, J, R, Z then 2 points

Page 89: Business Natural Languages Development In Ruby

when A, C, D, J, R, Z then 2 points

when A, C, D, J, R, Z then 2

rule.gsub / points/, ‘’

Page 90: Business Natural Languages Development In Ruby

when A, C, D, J, R, Z then 2

Page 91: Business Natural Languages Development In Ruby

when A, C, D, J, R, Z then 2

rule.gsub /([A-Z])/, 'FareClass::\1'

Page 92: Business Natural Languages Development In Ruby

when FareClass::A, FareClass::C, FareClass::D, FareClass::J, FareClass::R,

FareClass::Z then 2

Page 93: Business Natural Languages Development In Ruby

when FareClass::A, FareClass::C, FareClass::D, FareClass::J, FareClass::R,

FareClass::Z then 2

Page 94: Business Natural Languages Development In Ruby

Getting it to execute

Page 95: Business Natural Languages Development In Ruby

BusinessLogic.rules returns the rules from the DB

Page 96: Business Natural Languages Development In Ruby

Business

Developer

Page 97: Business Natural Languages Development In Ruby

Business

Developer

Page 98: Business Natural Languages Development In Ruby

Business

DeveloperApprover

Production

Page 99: Business Natural Languages Development In Ruby

Deployment?

Page 100: Business Natural Languages Development In Ruby

Programmers: Are you out of a job?

Page 101: Business Natural Languages Development In Ruby

Absolutely Not

Page 102: Business Natural Languages Development In Ruby

•Language Workbench

Absolutely Not

Page 103: Business Natural Languages Development In Ruby

•Language Workbench

•Syntax Checking

Absolutely Not

Page 104: Business Natural Languages Development In Ruby

•Language Workbench

•Syntax Checking

•Test Environment

Absolutely Not

Page 105: Business Natural Languages Development In Ruby

•Language Workbench

•Syntax Checking

•Test Environment

•Approval Workflow

Absolutely Not

Page 106: Business Natural Languages Development In Ruby

Syntax Checking

Page 107: Business Natural Languages Development In Ruby

Syntax Checking

When the fare class is A, C, D, J, R, or Z then award 2

points

Page 108: Business Natural Languages Development In Ruby

Syntax Checking

Page 109: Business Natural Languages Development In Ruby

Syntax Checking

When the far

Did you mean ‘fare class’?

Page 110: Business Natural Languages Development In Ruby

CommercialLanguage

Workbenches

Page 111: Business Natural Languages Development In Ruby

CommercialLanguage

Workbenches

MPS - JetBrainsIntentional

Page 112: Business Natural Languages Development In Ruby

Another Example

Page 113: Business Natural Languages Development In Ruby

Employee Compensation

Page 114: Business Natural Languages Development In Ruby

Corporate Datastore

Page 115: Business Natural Languages Development In Ruby

Example Employees

Page 116: Business Natural Languages Development In Ruby

Demo

Page 117: Business Natural Languages Development In Ruby
Page 118: Business Natural Languages Development In Ruby

Bad Choice?

Page 119: Business Natural Languages Development In Ruby

Author?

Page 120: Business Natural Languages Development In Ruby

Author?

Change Frequency

Page 121: Business Natural Languages Development In Ruby

What deserves a BNL?

Page 122: Business Natural Languages Development In Ruby

Ruby?

Page 123: Business Natural Languages Development In Ruby

BNL vs Rules Engines