118
Lessons Learned Continuously Developing Service Oriented Architecture in a

Lessons Learned in a Continuously Developing Service-Oriented Architecture

Embed Size (px)

DESCRIPTION

The goal of this presentation is to highlight the successes in applying modern development practices that tend to be regarded as “too much overhead” for small development teams. I was one of those nay-sayers. This presentation is a journey in moving an overburdened development team into a more efficient environment where regular progress is made and realistic expectations in timelines become possible. I plan to cover topics such as agile project management, application design strategies, version control, unit testing, and all the reasons why these globally common practices are well worth buy-in at a developer and managerial level. Given time constraint on presentation length, the depth of technical discussion will be relatively shallow. As I progress through the talk, I plan to use a recent development project for illustrative purposes. By not diving too deep, the discussion can instead focus more on proving that these processes do have real return on investment for developers and project managers alike.

Citation preview

Page 1: Lessons Learned in a Continuously Developing Service-Oriented Architecture

Lessons LearnedContinuously Developing

Service Oriented Architecture

in a

Page 2: Lessons Learned in a Continuously Developing Service-Oriented Architecture
Page 3: Lessons Learned in a Continuously Developing Service-Oriented Architecture

Lesson 1Approach Problems Honestly

Assess the situation for what it is.

Page 4: Lessons Learned in a Continuously Developing Service-Oriented Architecture

Knowledge.

Page 5: Lessons Learned in a Continuously Developing Service-Oriented Architecture

...things I know

Page 6: Lessons Learned in a Continuously Developing Service-Oriented Architecture

...things I know I don’t know

Page 7: Lessons Learned in a Continuously Developing Service-Oriented Architecture

...things I don’t know I don’t know

Page 8: Lessons Learned in a Continuously Developing Service-Oriented Architecture

Assess the Situation

Page 9: Lessons Learned in a Continuously Developing Service-Oriented Architecture

No Monolithic IT Organization

Page 10: Lessons Learned in a Continuously Developing Service-Oriented Architecture

Developers in Colleges and Departments

Page 11: Lessons Learned in a Continuously Developing Service-Oriented Architecture

Tendencies of Small Teams

Page 12: Lessons Learned in a Continuously Developing Service-Oriented Architecture

Sub-optimal SkillsetDistribution

Page 13: Lessons Learned in a Continuously Developing Service-Oriented Architecture

http://employeerightsguide.com/computer-programmers-job-description-salary-information-and-more/

Page 14: Lessons Learned in a Continuously Developing Service-Oriented Architecture

http://irisclasson.com/2013/01/09/stupid-question-123-what-is-a-polyglot-programmer-and-should-we-be-one/

Page 15: Lessons Learned in a Continuously Developing Service-Oriented Architecture

http://faildesk.net/2012/08/24/it-horror-stories-scumbag-programmers/

Page 16: Lessons Learned in a Continuously Developing Service-Oriented Architecture
Page 17: Lessons Learned in a Continuously Developing Service-Oriented Architecture

Little Long-term Vision

Page 18: Lessons Learned in a Continuously Developing Service-Oriented Architecture

http://postgradproblems.com/8-things-you-didnt-know-about-the-mighty-morphin-power-rangers/

Page 19: Lessons Learned in a Continuously Developing Service-Oriented Architecture
Page 20: Lessons Learned in a Continuously Developing Service-Oriented Architecture
Page 21: Lessons Learned in a Continuously Developing Service-Oriented Architecture
Page 22: Lessons Learned in a Continuously Developing Service-Oriented Architecture
Page 23: Lessons Learned in a Continuously Developing Service-Oriented Architecture
Page 24: Lessons Learned in a Continuously Developing Service-Oriented Architecture
Page 25: Lessons Learned in a Continuously Developing Service-Oriented Architecture

Sometimes Poor Overall Organization

Page 26: Lessons Learned in a Continuously Developing Service-Oriented Architecture

Developers like all of the things.

Page 27: Lessons Learned in a Continuously Developing Service-Oriented Architecture

Project Management

Page 28: Lessons Learned in a Continuously Developing Service-Oriented Architecture
Page 29: Lessons Learned in a Continuously Developing Service-Oriented Architecture

Be deliberate in tech choices.

Page 30: Lessons Learned in a Continuously Developing Service-Oriented Architecture
Page 31: Lessons Learned in a Continuously Developing Service-Oriented Architecture

http://irisclasson.com/2013/01/09/stupid-question-123-what-is-a-polyglot-programmer-and-should-we-be-one/

Page 32: Lessons Learned in a Continuously Developing Service-Oriented Architecture

Why are we here today?

Page 33: Lessons Learned in a Continuously Developing Service-Oriented Architecture

Lesson 2There is no silver bullet

Unless you make your own.

Page 34: Lessons Learned in a Continuously Developing Service-Oriented Architecture

So, what was our problem?

Page 35: Lessons Learned in a Continuously Developing Service-Oriented Architecture

We didn’t know there was a problem.

Page 36: Lessons Learned in a Continuously Developing Service-Oriented Architecture

We found duplication everywhere.

Page 37: Lessons Learned in a Continuously Developing Service-Oriented Architecture

Content Management

End-users are allowed to maintain HTML sites using whatever client they choose:

SSH + VIM ... yep.

Notepad++ & SFTP (Expandrive)

Dreamweaver

Contributes

Page 38: Lessons Learned in a Continuously Developing Service-Oriented Architecture

Application Development

Access to directory information

Large file storage and distribution

Payment Card Industry Interfaces

Multiple smaller applications that provide basic data collection and reporting

Page 39: Lessons Learned in a Continuously Developing Service-Oriented Architecture

http://irisclasson.com/2013/01/09/stupid-question-123-what-is-a-polyglot-programmer-and-should-we-be-one/

Again...

Page 40: Lessons Learned in a Continuously Developing Service-Oriented Architecture

Stability and Agility

Page 41: Lessons Learned in a Continuously Developing Service-Oriented Architecture
Page 42: Lessons Learned in a Continuously Developing Service-Oriented Architecture
Page 43: Lessons Learned in a Continuously Developing Service-Oriented Architecture
Page 44: Lessons Learned in a Continuously Developing Service-Oriented Architecture

Lesson 3Set some ground rules

Develop a set of best practices for your team.

Page 45: Lessons Learned in a Continuously Developing Service-Oriented Architecture

#1Make iterative advances.

Page 46: Lessons Learned in a Continuously Developing Service-Oriented Architecture

Don’t expect drastic change.#2

Page 47: Lessons Learned in a Continuously Developing Service-Oriented Architecture

Adopt a Coding Standard#3

Page 48: Lessons Learned in a Continuously Developing Service-Oriented Architecture
Page 49: Lessons Learned in a Continuously Developing Service-Oriented Architecture
Page 50: Lessons Learned in a Continuously Developing Service-Oriented Architecture
Page 51: Lessons Learned in a Continuously Developing Service-Oriented Architecture

Adopt a _________ Standard.web services#3a

Page 52: Lessons Learned in a Continuously Developing Service-Oriented Architecture

NC State Interop Group is formed.

Page 53: Lessons Learned in a Continuously Developing Service-Oriented Architecture
Page 54: Lessons Learned in a Continuously Developing Service-Oriented Architecture
Page 55: Lessons Learned in a Continuously Developing Service-Oriented Architecture

Immediate Benefits

Page 56: Lessons Learned in a Continuously Developing Service-Oriented Architecture
Page 57: Lessons Learned in a Continuously Developing Service-Oriented Architecture

Oops... I think we broke it.

Page 58: Lessons Learned in a Continuously Developing Service-Oriented Architecture

Establish a “Definition of Done”#4

Page 59: Lessons Learned in a Continuously Developing Service-Oriented Architecture

Should only require tasks under teams control

Avoid having too many states; to do, doing, and done are enough

Avoid tasks that are susceptible to getting “stuck”

Page 60: Lessons Learned in a Continuously Developing Service-Oriented Architecture

Lesson 4Buy into established practices

Unless you make your own.

Page 61: Lessons Learned in a Continuously Developing Service-Oriented Architecture

Version Control

Page 62: Lessons Learned in a Continuously Developing Service-Oriented Architecture

Source control lays the foundation for best practice and is the beginning of a multiplicative return on investment

Serves as an authoritative record to the state of an application and creates an open point of reference for a development team

It’s not just about being able to rollback

Page 63: Lessons Learned in a Continuously Developing Service-Oriented Architecture

http://git-scm.com/book

Page 64: Lessons Learned in a Continuously Developing Service-Oriented Architecture
Page 65: Lessons Learned in a Continuously Developing Service-Oriented Architecture

A better development workflow appears.

Page 66: Lessons Learned in a Continuously Developing Service-Oriented Architecture
Page 67: Lessons Learned in a Continuously Developing Service-Oriented Architecture

What does Github do?

Page 68: Lessons Learned in a Continuously Developing Service-Oriented Architecture

Everything in master is deployable

To work on something new, create a descriptive branch off of master

Commit to that branch locally and regularly push your work to the server

When you need feedback, help, or think it’s ready, submit a “pull request”

After code review, the branch is merged into master and the code is deployed immediately

Page 69: Lessons Learned in a Continuously Developing Service-Oriented Architecture
Page 70: Lessons Learned in a Continuously Developing Service-Oriented Architecture
Page 71: Lessons Learned in a Continuously Developing Service-Oriented Architecture
Page 72: Lessons Learned in a Continuously Developing Service-Oriented Architecture

Pick something that fits.

Page 73: Lessons Learned in a Continuously Developing Service-Oriented Architecture

Code Reviews

Page 74: Lessons Learned in a Continuously Developing Service-Oriented Architecture

Code review as part of a version control workflow creates a unique opportunity for pushing quality of code that goes into an application

Reviews are a great time to enforce the current iteration of best practices your team has adopted

It can foster discussion on how best to approach a new feature or bug-fix

Page 75: Lessons Learned in a Continuously Developing Service-Oriented Architecture

Don’t make it personal

Don’t make inquisitiveness an attack

Always... always assume best intentions

Page 76: Lessons Learned in a Continuously Developing Service-Oriented Architecture
Page 77: Lessons Learned in a Continuously Developing Service-Oriented Architecture

Testing...

Page 78: Lessons Learned in a Continuously Developing Service-Oriented Architecture
Page 79: Lessons Learned in a Continuously Developing Service-Oriented Architecture

“If there are no tests, it’s broken.”

Page 80: Lessons Learned in a Continuously Developing Service-Oriented Architecture

Unit, Functional, TDD, BDD... bunch of fads.

Page 81: Lessons Learned in a Continuously Developing Service-Oriented Architecture

Unit Test

A method by which individual units of source code are tested to determine if

they are fit for use.

Page 82: Lessons Learned in a Continuously Developing Service-Oriented Architecture

Is your app testable in isolation?(some apps resist the testing)

Page 83: Lessons Learned in a Continuously Developing Service-Oriented Architecture

public class SuperMan implements SuperHero { private Cape cape = new Cape(); private Spandex costume = new Spandex(); @Override public void fly() { // Do something exciting with cape and spandex. }}

Page 84: Lessons Learned in a Continuously Developing Service-Oriented Architecture

public class SuperMan implements SuperHero { public SuperMan(Cape cape, Spandex costume) { this.cape = cape; this.costume = costume; } @Override public void fly() { // Do something exciting with cape and spandex. }}

Page 85: Lessons Learned in a Continuously Developing Service-Oriented Architecture

and more...

http://en.wikipedia.org/wiki/List_of_unit_testing_frameworks

Page 86: Lessons Learned in a Continuously Developing Service-Oriented Architecture
Page 87: Lessons Learned in a Continuously Developing Service-Oriented Architecture

Functional Test

A quality assurance process that bases its test cases on the specifications of

the component under test

Page 88: Lessons Learned in a Continuously Developing Service-Oriented Architecture
Page 89: Lessons Learned in a Continuously Developing Service-Oriented Architecture

Test Driven Development

Write a test that fails

Write code to make it pass

Repeat

Page 90: Lessons Learned in a Continuously Developing Service-Oriented Architecture

Behavior Driven Development

Write a test that fails

Write code to make it pass

Repeat

Page 91: Lessons Learned in a Continuously Developing Service-Oriented Architecture

Every app has behavior... hopefully.(that means it can’t resist the testing)

Page 92: Lessons Learned in a Continuously Developing Service-Oriented Architecture

Selenium Zombie.js Phantom.js

Page 93: Lessons Learned in a Continuously Developing Service-Oriented Architecture
Page 94: Lessons Learned in a Continuously Developing Service-Oriented Architecture

&

Page 95: Lessons Learned in a Continuously Developing Service-Oriented Architecture
Page 96: Lessons Learned in a Continuously Developing Service-Oriented Architecture
Page 97: Lessons Learned in a Continuously Developing Service-Oriented Architecture

In Summary...

Page 98: Lessons Learned in a Continuously Developing Service-Oriented Architecture
Page 99: Lessons Learned in a Continuously Developing Service-Oriented Architecture

Mitigating Brain Drain

Page 100: Lessons Learned in a Continuously Developing Service-Oriented Architecture

Make your developers happy...

Page 101: Lessons Learned in a Continuously Developing Service-Oriented Architecture

DocumentationExternal documentation works, but must be kept up to date

Meaningful comments in code

Page 102: Lessons Learned in a Continuously Developing Service-Oriented Architecture

public class SuperMan implements SuperHero { ... @Override public void fly() { // If the costume is not equipped. if (!costume.isEquipped()) return; } ...}

Page 103: Lessons Learned in a Continuously Developing Service-Oriented Architecture
Page 104: Lessons Learned in a Continuously Developing Service-Oriented Architecture

SOLID Design Principles

Page 105: Lessons Learned in a Continuously Developing Service-Oriented Architecture

Single Responsibility Principle

Open / Closed Principle

Liskov Substitution Principle

Interface Segregation Principle

Dependency Inversion Principle

Page 106: Lessons Learned in a Continuously Developing Service-Oriented Architecture

+

Domain-Driven Design

Page 107: Lessons Learned in a Continuously Developing Service-Oriented Architecture

... find a set of best practices that fit and apply them as they

make sense for your team.

Page 108: Lessons Learned in a Continuously Developing Service-Oriented Architecture

Finally... What’s this SOA Stuff?

Page 109: Lessons Learned in a Continuously Developing Service-Oriented Architecture

Let’s start with something familiar.

Page 110: Lessons Learned in a Continuously Developing Service-Oriented Architecture
Page 111: Lessons Learned in a Continuously Developing Service-Oriented Architecture
Page 112: Lessons Learned in a Continuously Developing Service-Oriented Architecture

A B C

DUPLICATION

Page 113: Lessons Learned in a Continuously Developing Service-Oriented Architecture

Service Oriented ArchitectureAn architectural pattern for developing discrete pieces of software to provide very specific functionality to other applications over a uniform communication protocol

Page 114: Lessons Learned in a Continuously Developing Service-Oriented Architecture
Page 115: Lessons Learned in a Continuously Developing Service-Oriented Architecture
Page 116: Lessons Learned in a Continuously Developing Service-Oriented Architecture
Page 117: Lessons Learned in a Continuously Developing Service-Oriented Architecture

MemcachedRedis / NoSQLElasticsearch

Page 118: Lessons Learned in a Continuously Developing Service-Oriented Architecture

Questions?