Ocean Engineering Principles

Our engineering principles are based on the DevOps CAMS acronym (Culture, Automation, Measurement and Sharing).

The main objectives of the Ocean Engineering practice are:

  • Simplify what we do in order to avoid reinventing the wheel.
  • Promote quality and security.
  • Better communication about what we do and why we are doing it. Our community needs information!
  • Be more effective in order to make a better use of our time.
  • Use some common good principles & patterns. These can be useful!

Key Concepts

  • Simplicity - Everything we define should be thin and simple.
  • Open Source - We are building FLOSS, so Open Source and Open Standards.
  • Openness - Community first, open discussions, open documentation, open requirements.
  • Quality - New best practices should be oriented to promote a high quality product.
  • Security - Security MUST be a first class citizen.
  • Automation - We should automate as much as we can…it will make our lives easier.
  • Team - All of us are part of the team. All the best practices will be defined by all us.

Culture

The backbone of any organization is its culture. It can be considered the “way of life” of an organization.

The Engineering practice is about more than acquiring new tools and taking on new technical methodologies. It’s about setting expectations and priorities, and establishing the fundamental beliefs that guide them.

Key elements of this are:

BeliefDescription
Learn to TrustIt is necessary to have the unified agreement and understanding that we are all on the same team.
Understand MotivationsConflicts often occur when people don’t understand each other and their motivation. Having common objectives and an understanding about the motivations of others helps achieve common goals.
Eliminate BlameBlame is pointless. In problematic situations it’s necessary to understand what went wrong and how to make sure it doesn’t happen again.
Anticipate FailureConstantly learn from mistakes and previous failures. Previous problems should be used to learn and provide the mechanisms to anticipate the failure again in the future.
Focus on Bottlenecks & FlowRethink the process and refactor constantly. Simple is better.
Eliminate Unplanned WorkUnplanned work is common but it is important to understand that priorities should be taken into consideration. It means some lower priority issues may need to go on hold.
Be ContinuousIterate in release cycles at a constant pace. This provides a continuous flow of deliverables that add value.
Form Dedicated, Cross-Functional TeamsArranging people around projects, rather than grouping them based off their skill sets.
TransparencyTransparency improves efficiency and productivity, reduces time and boosts employees’ engagement
Build Autonomy, Mastery and PurposeIt’s necessary to create a working environment where people feel they have autonomy, mastery and purpose. Rewarding people and reviewing goals ensures that the there is a clear single goal that everyone can focus on.

Automation

Automation embraces every aspect of the software and systems lifecycle, including requirements gathering, design, development, testing, application deployment and operations support.

BenefitDescription
Faster Time to MarketQuick application deployments and easy communication to the different stakeholders make getting to market faster.
Continuous IntegrationPeople can easily do unit testing, code quality analysis, and then commit to the SCM to build from an IDE, all in an integrated tool setup without switching between systems.
Continuous DeliveryTeams can automatically generate releases ready to be installed in any environment.

Measurement

If you can’t measure it, you can’t improve it. A successful Engineering & DevOps implementation will measure everything it can as often as it can.

BenefitDescription
PerformanceDepending on the application, it involves gathering the key performance indicators. These are useful to understand the status and define proactive actions to improve the application’s stability and performance.
ProcessReviewing the process performance to understand if the processes should be refactored.
PeopleReviewing team member metrics to understand personal performance. Some could require support and they are not communicating it. Understanding the situation can make easier to help others.

Sharing

Today’s organizations and software require teams of people with different skills and specialized knowledge. To work efficiently, it’s important to work well together, and sharing is how you get there. Sharing is Caring…

BeliefDescription
Open CommunicationOpen, honest and clear communication helps with sharing information. This applies to both Internal and External communication, from top to bottom and bottom to top.
Shared KnowledgeSuccessful teams share their experiences. Knowledge should be shared and spread across all collaborators.
Accessible InformationExpose metrics to everyone within your tribe that might be interested. Keep things simple and clear — explain how these metrics affect software delivery and overall company performance. Sharing progress data will also help foster a more effective culture.