4 Steps to Innovate Faster by Building a World-Class Technology Organization - Veejay Jadhaw
Welcome!
Throughout this article you will find
embedded links referencing my previous articles, on various topics such as Robotic Process Automation, Artificial
Intelligence, Big Data, Cloud, SaaS, and how to approach building a Digitally Connected Software Platform. Please do take a moment to read those, as
they would provide more context.
Below
is my point of view on how to enable businesses to improve speed to market by
building a world-class technology organization.
I have
prioritized a 4 Key Step Framework
1 - Lead by
Example, build a great team, culture and Implement Key Metrics: As a leader, it is important to lead
by example and foster a culture of innovation. Secondly, as the saying goes, "if
you don’t measure it you can’t manage or improve it". Leveraging metrics and making decisions based
on data driven hypotheses is a very critical component of building a
world-class engineering organization. In today’s enterprises, tools and
technology isn’t enough. Developers need to take full ownership of the
development, testing, automation tools and, most importantly, building
operational capabilities into the pipeline so the move to production is
easier. This requires collaboration, open dialog, and as Jeff
Bezos says, “Disagree and Commit”.
Building this type of a culture will foster innovation, open dialog,
break silos, and most importantly, it will build the foundation of
your technology organization. In terms of metrics, I would recommend defining, implement and tracking metrics in the following categories: Velocity, Productivity, Security, Quality, Complexity, Predictability and Customer Satisfaction.
2 - Architecture & Design:
The world is transitioning towards open platforms underpin with Big Data, Machine Learning Analytic and Cloud / SaaS. As a first step, I would recommend building
your platform strategy. My recent article on this topic will at
least get you thinking about a digitally connected platform strategy approach. From Architecture standpoint, while there are
many different types of architectures and design patterns you could use, I am
going to use a micro-services based
architecture and containers as
an example to build and ship quality software faster, and gradually moving
away from a traditional monolithic architecture. It will be important that your micro services are
truly granular services that can run independently, else there is no point, and
you will not realize faster speed to market.
While Micro-services are great, they are also complicated, and increases
the point of failures – which is not a good.
Therefore, it is important to evaluate your business model, business objective,
and select an architecture and design pattern that works for the business
outcome you are looking to achieve.
3 - Containerization:
A must to implement.
We
are familiar with shipping containers that delivery goods around the world. What is put in the shipping container is received
on the other end in the same, original condition.
Software containers are similar vehicles for delivering software
that could be used to ship software and work as expected. Examples of what you
can put in software containers includes almost anything, code modules, run time libraries,
database, configurations, scrips, the list goes on. Because of the ease of using containers, it’s
not important to pack everything in one container. You can have multiple containers loaded with different
software components, libraries, databases, configurations etc. There are times however, where
it does not make sense to use containers,
for examples a simple website that uses only uses HTML, CSS etc. Point
being let’s not complicate things when there is no business value. Bottom-line, automate everything that you
can, take all the necessary steps to automate your entire organization progressively
to create efficiency. Checkout my recent article on how to how to Automate an Enterprise using Robotic Process Automation.
4 - Continuous
Code Integration and Continuous Delivery: A world
class technology organization is capable of shipping quality code with a much
higher velocity, sometimes multiple times a day {assuming the business model
requires it} IF you have integrated your agile development methodology with an
automated DevOps process. I call it
Agile + Auto DevOps = Boom!
Referencing the above diagram, listed below are some key point of failures that will impact your ability to become a world-class
Technology Organization. Therefore, you
must address these issues if it exists in your respective organizations.
Plan:
- · Inadequate or incorrect requirements definition
- · User-stories incorrectly captured, insufficient information
- · Persona-based planning / requirements, depending on the project technical architecture.
- · design and performance SLAs need to be laid out
Code:
- · Improper usage of frameworks, tools, technologies
- · Poor understanding of requirements, communication gaps between developers, BAs & PMs
- · Lack of rigor in usage of source-code management tools and version control, code merges in-frequent check-ins, or code commits without proper due diligence
- · Lack of attention or knowledge of scalable design and architecture
- · Strong collaboration and project management, with team leads performing periodic reviews with sprint teams
Build:
- · Poorly componentized code, leading to dependencies between modules, causing build issues
- · Lack of discipline for code commits and weak collaboration between teams
Test:
- · Poor quality and coverage of tests, tests failing to keep-up as changes are made (stale tests)
- · Lack of automation, end-to-end regression testing
- · Lack of proper tool set and frameworks that aid testing
- · Lack of scientific approaches in performance testing and tuning
Deploy:
- · Lack of one-click automation in deployment encompassing various artifacts: code, environment specific configuration, database and other scripts, set up of reference or test data
- · Complexity of deployment – usually around data & configuration management
- · Lack of or inadequate tool usage, e.g., inadequate containerization
- · Inherent application deficiencies in clear componentization, microservices design, architecture and scalability, legacy application components with little plug-and-play
Operate:
- · Lack of personnel trained in infrastructure support or quick problem resolution
- · Inadequate knowledge of Resource Management tools for the deployment platform
Monitor:
- · Inadequate tool set or tool capabilities for efficient monitoring of application and infrastructure components
- · Insufficient instrumentation, resulting in lack of vital information regarding application health
- · Improper classification of telemetry data (e.g. DEBUG, INFO, TRACE)
- · Lack of experts who can perform a root-cause analysis of where performance is lacking, or improper judgment of low-hanging fruit to improve performance
Feedback
- · Inadequate or incorrect feedback regarding defects, functional or non-functional
- · Low defect containment
- · Improper tools or usage for capturing defects, or delays in resolution
- · Improper classification and prioritization of defects, or lack of collaboration between teams, improper planning or weak project management