DEVELOPING
ENTERPRISE
READY
SOFTWARE
Nate Brown
@Woz U
ABOUT ME
• Director of Software Engineering at AppointmentPlus
• Team of 25+ in US and India
• SaaS using LAMP, Laravel, Angular, React, Vue
• Mobile apps in iOS and Android
• MS Office apps in C# .Net
• Previous roles
• Software Development Manager at AppointmentPlus
• Lead Software Developer at AppointmentPlus
• Senior Application Systems Analyst at University of Arizona College of Medicine
• Workstation Specialist at Saint Xavier University
• Helpdesk Intern
• Freelance/Self-Employed Multimedia Designer
REAL WORLD
ENTERPRISE SOFTWARE
• Developing beyond boot camp
• Enterprise software?
• Providing mission critical function for an organization
• Serving the business needs of “large” organizations
• Serving the consumer needs of an organization’s customers
• B2B2C
• High level rubric/framework for guiding development practices
REAL WORLD
ENTERPRISE SOFTWARE
• Focused heavily on loosely coupled relationships
• between the application and its underlying infrastructure (code vs server)
• between the layers of the application (data, logic, presentation)
• between the components within each layer (i.e. notifications vs reporting)
• between the application its required human interaction (releases, resilience)
THE THREE CONTEXTS
• Commitment to fulfilling provider responsibilities
• Foundational standards
• The baseline expectations
• Consistent regardless of implementation
• Commitment to meeting client expectations
• Facilitating the function of the enterprise
• Empowering the growth of the enterprise
• Commitment to providing engaging user experiences
• The “wow factor”
• Pushing the enterprise towards innovation
THE PILLARS
Provider
Responsibilities
• Secure
• Scalable
• Portable
• Transferable
• Maintainable
Client
Expectations
• Functional
• Global
• Extensible
• Adaptable
• Powerful
User
Experiences
• Responsive
• Accessible
• Innovative
COMMITMENT TO FULFILLING
PROVIDER RESPONSIBILITIES
Building on a proper foundation
SECURE
Certain to remain or continue to be not subject to threat; protected against attack or
other criminal activity.
• Security is the foremost responsibility of the software provider
• Security starts with the developer’s physical and virtual environments
• Security is not a milestone, it’s a continuous theme and an ongoing activity
SCALABLE
Capable of being easily expanded or upgraded on demand; able to be used or
produced in a range of capabilities
• Scalability refers to both the technology and the real-world implementation
• Design and develop to handle ebbs and flows in usage
• Consider the client’s current state and future needs
PORTABLE
Easily moves between environments and technologies on demand, with little to no
hard dependencies
• Develop in independent and interchangeable layers
• Strive to be loosely coupled to the environments and architectures in which the
application is deployed
• Allow discrete components/services to move without detriment to the application
TRANSFERABLE
Able to be transferred or made over to the possession of another
• Transferability applies to development and post-development hand offs
• Write code for the next developer
• Plan to have more than one SME for each component or feature
• Provide thorough documentation when handing off to a teammate, the client, a
tester, a contractor, etc
MAINTAINABLE
Exists in continuance with low cost of ownership; able to be upgraded as needed
• Capture, manage, and eliminate technical debt
• Monitor updates to dependencies
• Plan for frequent, smaller refactors and avoid lengthy, risky rewrites
• Write code that is clean, concise, and well documented
COMMITMENT TO MEETING
CLIENT EXPECTATIONS
Developing solutions that propel
FUNCTIONAL
Capable of serving the purpose for which it was designed
• Be consultative and partner with the client to understand and achieve the purpose
• Allow the user to seamlessly perform intended functions as expected
• Do not tolerate defects of any level of criticality in the product’s core competency
GLOBAL
Thinking holistically in terms of the entire world
• Evaluate every aspect of the application in terms of global availability
• Almost all other aspects are all impacted by locale
EXTENSIBLE
Designed with the ability to expand or add on to its capabilities; implementation
takes future growth into consideration
• Design your application to play well with others
• Build in hooks, listeners, messaging, callouts, etc to enable customization and
integration
• Avoid rigid implementations that stifle innovation
ADAPTABLE
Able to adjust readily to different conditions; able to be modified for a new use or
purpose
• Pertains to the scalability of the application’s real world functionality
• Design to be flexible and configurable to fulfill core functions in a variety of use
cases
• As the client’s operating environment evolves, so does its use of the application
POWERFUL
Giving control and influence over people and events; having a strong effect
• Give the user a sense of command and control over the problem it is designed to
solve
• Provide a complete solution, addressing all aspects of the core competency
• The user should feel confident in the ability of the application
COMMITMENT TO PROVIDING
ENGAGING USER EXPERIENCES
Delivering the wow factor
RESPONSIVE
Appropriately reacting to change quickly and in a desired or positive way
• Responsiveness goes beyond adapting the presentation on varying types and sizes
of devices
• Your application will need to adapt to changes in consumers’ expectations in terms
of advancing technology
ACCESSIBLE
Easy for anyone within the target audience to obtain and use
• Understand the demographics of the user base and/or target audience
• Consider cognitive and physical ability to provide ease of use
• Consider global accessibility standards
INNOVATIVE
Introducing new ideas; original and creative in thinking
• Strive to provide the end user with a powerful, forward-thinking experience
• Leverage advances in technology to push the boundaries of functionality
EXAMPLES
Real world examples from AppointmentPlus
APPOINTMENTPLUS 2010
• Single server “stacks”
• Serving multiple purposes
• Multiple non synched instances
• Different code versions
• Different platform versions
• Arbitrary load assignment
• No tuning/scaling
• Manual build and deploy
APPOINTMENTPLUS 2018
• Separate load balanced web servers,
based on function
• Separate APIs and services based on
function
• Secure internal tools
• Offload reporting engine
• Central business logic API serves
multiple interfaces
• Each component tuned and scaled
based on function
• Automated deployment
THE PILLARS
Provider
Responsibilities
• Secure
• Scalable
• Portable
• Transferable
• Maintainable
Client
Expectations
• Functional
• Global
• Extensible
• Adaptable
• Powerful
User
Experiences
• Responsive
• Accessible
• Innovative
www.nate.bio
www.ersaas.org
Thanks for listening!

Developing Enterprise Ready Software

  • 1.
  • 2.
    ABOUT ME • Directorof Software Engineering at AppointmentPlus • Team of 25+ in US and India • SaaS using LAMP, Laravel, Angular, React, Vue • Mobile apps in iOS and Android • MS Office apps in C# .Net • Previous roles • Software Development Manager at AppointmentPlus • Lead Software Developer at AppointmentPlus • Senior Application Systems Analyst at University of Arizona College of Medicine • Workstation Specialist at Saint Xavier University • Helpdesk Intern • Freelance/Self-Employed Multimedia Designer
  • 3.
    REAL WORLD ENTERPRISE SOFTWARE •Developing beyond boot camp • Enterprise software? • Providing mission critical function for an organization • Serving the business needs of “large” organizations • Serving the consumer needs of an organization’s customers • B2B2C • High level rubric/framework for guiding development practices
  • 4.
    REAL WORLD ENTERPRISE SOFTWARE •Focused heavily on loosely coupled relationships • between the application and its underlying infrastructure (code vs server) • between the layers of the application (data, logic, presentation) • between the components within each layer (i.e. notifications vs reporting) • between the application its required human interaction (releases, resilience)
  • 5.
    THE THREE CONTEXTS •Commitment to fulfilling provider responsibilities • Foundational standards • The baseline expectations • Consistent regardless of implementation • Commitment to meeting client expectations • Facilitating the function of the enterprise • Empowering the growth of the enterprise • Commitment to providing engaging user experiences • The “wow factor” • Pushing the enterprise towards innovation
  • 6.
    THE PILLARS Provider Responsibilities • Secure •Scalable • Portable • Transferable • Maintainable Client Expectations • Functional • Global • Extensible • Adaptable • Powerful User Experiences • Responsive • Accessible • Innovative
  • 7.
    COMMITMENT TO FULFILLING PROVIDERRESPONSIBILITIES Building on a proper foundation
  • 8.
    SECURE Certain to remainor continue to be not subject to threat; protected against attack or other criminal activity. • Security is the foremost responsibility of the software provider • Security starts with the developer’s physical and virtual environments • Security is not a milestone, it’s a continuous theme and an ongoing activity
  • 9.
    SCALABLE Capable of beingeasily expanded or upgraded on demand; able to be used or produced in a range of capabilities • Scalability refers to both the technology and the real-world implementation • Design and develop to handle ebbs and flows in usage • Consider the client’s current state and future needs
  • 10.
    PORTABLE Easily moves betweenenvironments and technologies on demand, with little to no hard dependencies • Develop in independent and interchangeable layers • Strive to be loosely coupled to the environments and architectures in which the application is deployed • Allow discrete components/services to move without detriment to the application
  • 11.
    TRANSFERABLE Able to betransferred or made over to the possession of another • Transferability applies to development and post-development hand offs • Write code for the next developer • Plan to have more than one SME for each component or feature • Provide thorough documentation when handing off to a teammate, the client, a tester, a contractor, etc
  • 12.
    MAINTAINABLE Exists in continuancewith low cost of ownership; able to be upgraded as needed • Capture, manage, and eliminate technical debt • Monitor updates to dependencies • Plan for frequent, smaller refactors and avoid lengthy, risky rewrites • Write code that is clean, concise, and well documented
  • 13.
    COMMITMENT TO MEETING CLIENTEXPECTATIONS Developing solutions that propel
  • 14.
    FUNCTIONAL Capable of servingthe purpose for which it was designed • Be consultative and partner with the client to understand and achieve the purpose • Allow the user to seamlessly perform intended functions as expected • Do not tolerate defects of any level of criticality in the product’s core competency
  • 15.
    GLOBAL Thinking holistically interms of the entire world • Evaluate every aspect of the application in terms of global availability • Almost all other aspects are all impacted by locale
  • 16.
    EXTENSIBLE Designed with theability to expand or add on to its capabilities; implementation takes future growth into consideration • Design your application to play well with others • Build in hooks, listeners, messaging, callouts, etc to enable customization and integration • Avoid rigid implementations that stifle innovation
  • 17.
    ADAPTABLE Able to adjustreadily to different conditions; able to be modified for a new use or purpose • Pertains to the scalability of the application’s real world functionality • Design to be flexible and configurable to fulfill core functions in a variety of use cases • As the client’s operating environment evolves, so does its use of the application
  • 18.
    POWERFUL Giving control andinfluence over people and events; having a strong effect • Give the user a sense of command and control over the problem it is designed to solve • Provide a complete solution, addressing all aspects of the core competency • The user should feel confident in the ability of the application
  • 19.
    COMMITMENT TO PROVIDING ENGAGINGUSER EXPERIENCES Delivering the wow factor
  • 20.
    RESPONSIVE Appropriately reacting tochange quickly and in a desired or positive way • Responsiveness goes beyond adapting the presentation on varying types and sizes of devices • Your application will need to adapt to changes in consumers’ expectations in terms of advancing technology
  • 21.
    ACCESSIBLE Easy for anyonewithin the target audience to obtain and use • Understand the demographics of the user base and/or target audience • Consider cognitive and physical ability to provide ease of use • Consider global accessibility standards
  • 22.
    INNOVATIVE Introducing new ideas;original and creative in thinking • Strive to provide the end user with a powerful, forward-thinking experience • Leverage advances in technology to push the boundaries of functionality
  • 23.
    EXAMPLES Real world examplesfrom AppointmentPlus
  • 24.
    APPOINTMENTPLUS 2010 • Singleserver “stacks” • Serving multiple purposes • Multiple non synched instances • Different code versions • Different platform versions • Arbitrary load assignment • No tuning/scaling • Manual build and deploy
  • 25.
    APPOINTMENTPLUS 2018 • Separateload balanced web servers, based on function • Separate APIs and services based on function • Secure internal tools • Offload reporting engine • Central business logic API serves multiple interfaces • Each component tuned and scaled based on function • Automated deployment
  • 28.
    THE PILLARS Provider Responsibilities • Secure •Scalable • Portable • Transferable • Maintainable Client Expectations • Functional • Global • Extensible • Adaptable • Powerful User Experiences • Responsive • Accessible • Innovative
  • 29.

Editor's Notes

  • #2 We will discuss: What is the definition of enterprise software In what contexts does enterprise software exist and operate Key aspects (aka “pillars”) that make up enterprise software development best practices
  • #3 Have extensive experience working directly with small to enterprise clients, small to enterprise sales teams, support teams, marketing teams, executive leadership, and of course engineers Taken what I’ve gleaned from these experiences to develop the concepts Presented to relevant stakeholders within the business to get buy in - All agree that this is what enterprise clients want
  • #4 Use as a guideline for our own engineers to help guide code reviews, 1:1, etc Topics that I expect interviewees to be able speak about and demonstrate Chances are you will work on an application that will serve an enterprise The technology gap between SMB and Enterprise is closing rapidly as providers find ways to make their platforms more available The expectations of SMB continue to grow Tendency to write less code that does more Should focus on singularity Design loosely coupled components Think in terms of OOP and SOA Does not dictate implementation or platform specific details
  • #5 Loosely coupled relationships is overarching theme The solution will be nimble, able to adapt to changes in the environment with limited manual human intervention. It will adjust to meet the demands of its usage.
  • #6 These three contexts are the make up the B2B2C “social contract”
  • #7 Not exhaustive, but desire is to be relevant to the entire stack List may grow over time, as the “standard” gains adoption
  • #9 How am I protecting the IP on my machine/environments? How am I securing my hardware? How am I securing the application access? How am I securing the user’s private information? During collection At rest In transit Data expiry How am I securing the environments? Maintaining dependencies etc
  • #10 How would I design and write this differently if it grew 10x, 100x, or 1000x the expected usage? Will the design/feature set still be viable at higher volumes? How do I reduce waste and increase efficiency?
  • #11 3 tier architecture Data layer Logic layer/api Interface layer What if any layer of your application needed to change? Data layer Infrastructure/network APIs/external services AP File upload example As demand and usage of the application changes, and as technology advances, there may be a need to deploy the application to an environment that utilizes different technologies
  • #12 Writing code for the next person Have a low “bus factor”, i.e. your code should outlive you Siloed development kills the future of projects
  • #13 Don’t leave @todos undone!
  • #15 No level of performance, security, presentation etc. will matter to the client if their end users perceive that they are not able to execute the basic functionality Understand requirements and deliver
  • #16 Technology "shrinks" the globe; less virtual distance between us What if you needed to translate your application into more languages later? How does the physical environment impact your application, e.g. rural areas with slower connections? Mention EU GDPR
  • #17 Be a cog in the bigger machine, a spoke on the wheel, etc Enterprises need the ability to send information to/from other systems at any point in the process Offering external APIs, relevant third-party integrations, and other such customizations are examples of effective extensibility
  • #18 Bridgestone examples of growth into Mobile tire repair, partner network Tesla using for test drives, build consultations, service appointments, etc Stay within the confines of the functional purpose, but allow for broader adoption
  • #19 AP handles full scope of appointment process from request to followup Beware of scope creep, doing more irrelevant things doesn’t make it more powerful!
  • #21 Single page parallax scrolling vs blinking text and gifs Remember web 2.0?
  • #22 Not going to build a command line app for a toddler Example of building a scheduling system for warehouses Costco example of French language and AODA requirements
  • #23 Doing the previous 12 things removes barriers to innovation
  • #27 Line 3: not PORTABLE, MAINTAINABLE; cant move without dependency, no documentation of dependency Line 7: not TRANSFERABLE; no docs, unclear variable names Line 8-14: not SECURE, PORTABLE, MAINTAINABLE; assumes availability w/o error handling Line 18: not PORTABLE, SCALABLE;
  • #28 Line 22-28: not EVERYTHING; too many unrelated functions in a single entity, no limit of scope, may break tight dependencies on change Line 30: not TRANSFERABLE; no docs, unclear variable names Line 31: not PORTABLE, MAINTAINABLE; cant move without dependency, no documentation of dependency Line 32,41: not SCALABLE, wasting resources by reinstantiating Line 41: not GLOBAL, doesn’t properly handle DST
  • #29 Not exhaustive, but desire is to be relevant to the entire stack List may grow over time, as the “standard” gains adoption