Microservices – Unraveling the Mystery
May 5, 2018
This article was first published on the Oracle for Developers blog.
More and more companies are looking to orient to a microservices architecture as their business processes and interactions become more complex and exist on a grand scale. For those of you that are new to the game, microservices provide a software architecture that organizes applications as modular services. A microservices-oriented architecture seeks to deploy applications as a set of separate services running different processes that communicate through light, flexible protocols. As such, each microservice can feature a different language; can receive individualized, targeted updates; and has the potential to scale exponentially without affecting the other services of the system.
Ideally, the flexibility of microservices translates to swifter deployments and updates to particular areas of the system, increased innovation from specialized teams, and improved capacity for rapid expansion. This style of architecture also allows companies to avoid cascading failures by separating modules and building robust practices in continuous delivery (CD) and continuous integration (CI), allowing team members to catch mistakes much faster.
But, you already know that because, right now, you’re ready to jump into microservices and you need to know how to structure your implementation in the best way possible. My colleagues and I followed a real-time, self-directed approach to implementing microservices and we’ve learned quite a lot. To help guide you through the process, we’ve put together our top recommendations when adopting microservices.
Clearly Outline Your Business Structure
A clearly defined business structure will make developing a microservices architecture much more successful from the beginning. Most of the benefits of a microservices architecture are due to the fact that systems are separated and teams can be divided based on business capabilities. However, your company might not be large enough to build specialized teams to work on individualized, complex projects.
Think about these questions:
Do you have both the monetary and human resources available to implement these projects in a responsible, successful manner?
Are you able to cover the implementation costs of adopting microservices?
Are you willing to accept the short-term productivity costs of microservices?
Will your organization run more smoothly on a microservices architecture?
The productivity cost of microservices is high, and microservices are worth undertaking only for large and complex software projects. Be realistic about your ability to take on these productivity costs and what that will mean for your team, your bottom line, and your customers.
Utilize Your Team’s Strengths
Your team is your greatest asset and the deciding factor when determining if your microservices approach will be successful. When switching to a microservices-oriented architecture, you’ll have the opportunity to create specialized development teams. Keep the teams small and interdisciplinary. When bringing individuals together and building teams around your capabilities, consider the “two pizza rule” coined by Jeff Bezos. In case you haven’t heard it before, it posits that you should never have a team or a meeting that requires more than two pizzas to feed everyone.
Adhering to the Agile and DevOps methodologies can be hugely beneficial when undertaking a complex architecture such as microservices. Consequently, your teams should be well versed in these principles. More specifically, take into account the level of experience and understanding your team displays in terms of CD and CI or, more simply, automation and collaboration. High levels of competency are incredibly important for the success of your microservices implementation.
Leverage the expertise of each team member to give your company a competitive and innovative advantage. So, take the time to think about where and with whom each team member will perform best. If your team is not yet technically up to the challenge, consider working with an external partner that has the skills and experience necessary to complete the project while you continue training your team.
Map Your Company’s Trajectory
A microservices architecture is not suitable for every company. To help ensure your company is on the right track, map your expected trajectory for the next few years. Then, use this to determine how microservices will impact your intended growth. Are you going to need to deploy to at least two domains that are built around different business capabilities? Will a monolith application still work efficiently for you in most cases?
Being realistic about your projected growth can help you understand the implementation and productivity costs of adopting microservices. You might never reach the scale of operations of an Amazon or Airbnb, and if a microservices architecture doesn’t seem to be in your near future, don’t push yourself to adopt an architecture that won’t provide the benefits you need. If your architecture doesn’t need to be complicated, don’t make it so.
Also, and perhaps more importantly, be very clear about how this shift will change your user experience or your client journey. With microservices, are your customers able to solve problems easily? Will they be receiving a better product or service after each deployment?
Bounded Contexts Are Your Friend
Hopefully, you’ve done your homework and you’re familiar with domain-driven design (DDD) and the concept of bounded Contexts (BCs). Essentially, BCs are clear boundaries that separate a domain, or the subdomain it uses, and clearly define the interrelationships between the participating contexts. These boundaries are incredibly important when using microservices, because they help to highlight when BCs interact and when activities or information needs to be translated between two BCs. In order to clearly display this information across teams, create a concept map that clearly outlines each BC, its relationship to the other BCs, and how the BCs communicate and share data.
Additionally, make sure you align your development team structure to the BCs you have defined. To reap the benefits of a microservices architecture, your teams should be built around business capabilities. You should not develop transversal teams that create new silos and reduce the independence of your delivery teams. You should be developing a competitive advantage by being able to release new functionalities to the market through your specialized teams.
Consider the Size of Your Microservices
There are several different schools of thought when it comes to the size of your microservices. Stefan Tilkov, cofounder of innoQ, recommends choosing a variety of structuring systems and avoiding making your services too small, because this will lead to too many “self-contained systems.” Lightbend founder, Jonas Bonér adds that a single-entity approach to microservices will eventually lead to a system that no longer represents the domain and then poses serious problems.
To start, each microservice should represent a business capacity. This allows you to focus and orient your teams appropriately. However, the size should really depend on how cohesive the concepts are within the domain model, within their BCs and the ubiquitous language used. Essentially, each microservice should represent a business capacity and focus on completing that functionality well, independent of other services.
We hope that following our guidelines and best practices will give you a solid foundation on which to start developing your microservices architecture. We know this article does not provide a comprehensive list, but it provides a highlight of the things we found most important to consider. I’d be very interested to hear how you’ve switched or maintained microservices efficiently, so don’t hesitate to get in touch! For more info: https://www.pslcorp.com/outsource-web-development/
Demystifying The DevOps Role: Consider These Solutions Before Beginning The Transitions
March 12, 2018
Call it the buzzword of the decade, but DevOps has perpetually shifted the way development teams and organizations approach their work. DevOps adoption rose from 66 percent in 2015 to 74 percent in 2016 and when something is popular, there’s always a tendency to ride the rapids and hastily jump on board.
Consequently, many larger companies are incorrectly rushing to adopt the practice for the wrong reasons. They’re searching for ‘experienced DevOps’ or ‘senior DevOps’ partners to join their software teams, and software companies are cashing in on the opportunity by offering tons of DevOps positions to these software development outsourcing organizations.
But the thing is, implementing DevOps isn’t as simple as hiring one person or a team of experts. DevOps is a culture that needs to be embraced by the entire organization. It’s a comprehensive, collaborative, and cross-team approach to managing the software development processes that relies heavily on automation and sharing – something smaller startups typically do well at. Once implemented, the culture removes silos and focuses on delivering real value.
So how can you correctly help your team to embrace DevOps if you haven’t implemented it off the bat? Consider these things before beginning the transition:
DevOps is not a role, nor a set of technologies
We often receive calls from companies, looking to hire DevOps experts to join their teams. But to those of us who work within a DevOps environment, this doesn’t make sense. While companies probably do need their teams to produce within a DevOps culture, it’s clear they don’t understand how the process functions as part of an organization. Because simply put, DevOps is not a role.
It’s almost impossible to hire an outside DevOps team and expect them to magically implement a functioning DevOps environment. Rather, the transition requires a strong cultural shift – with each team member becoming aligned with DevOps collaborative practices and philosophies, and working together to integrate long-separated systems and activities within an organization. So while many seek to hire new DevOps experts, it isn’t actually necessary: companies need to implement the change from within.
There’s no diving into DevOps head first – rather we need to become acclimatized to it inch-by-inch. Just like hiring one expert and expecting the rest of the team to match their level of expertise isn’t realistic, deploying DevOps technologies – or DevOps related tasks – doesn’t mean you’ve implemented DevOps, either. Practices like Continuous Integration (CI), Continuous Delivery (CD), and configuring Docker won’t do your team any good if they don’t truly understand how they function and how they correlate to DevOps processes. You’ll end up with software full of bugs in production or with unstable software and infrastructure, resulting in broken builds. A team needs to first embody the culture before rolling out new technologies.
You can train DevOps champions to oversee adoption
While hiring an outside expert won’t wondrously make an organization value DevOps philosophies, you can train DevOps Champions within your team to help everyone embrace the shift.
Since DevOps advocates a care for software – from conception to production – DevOps Champions thus need to be motivated by customer and business objectives, to help promote a sense of ownership inside the team. They need to be a strong and respected leader – but most of all, be well versed in DevOps culture and understand how it benefits the organization.
So how can DevOps Champions approach the transition? They need to coach the team to understand and implement the core DevOps values: Culture, Automation, Measurement and Sharing (CAMS).
They must work to foster an environment that encourages people to ask questions, cooperate with and learn from each other, and innovate and try new things. They need to teach the team the importance of automation, in order to save time and build consistency, and then measure improvement through data that’s accessible to everyone on the team – that way, there’s a clear understanding of why certain processes need to be changed. And finally, they need to encourage sharing tools to increase efficiency and create a higher level of engagement amongst employees.
Overall, DevOps Champions should encourage developers, quality analysts, business analysts, system administrators, among many other roles, to share a collaborative, iterative and committed approach to their work.
And for added DevOps support, it’s also a great idea to turn to experts or partners in the industry who’ve already made the shift. This allows for transitioning teams to understand the best practices, but also learn from other organizations’ mistakes.
DevOps experts can provide guidance and more specialized skills for larger companies
While everyone needs to understand DevOps processes and value the collaborative approach, not everyone on the team needs to be an expert in DevOps technologies. With complex problems, it’s fine for DevOps Champions to configure the tasks and lead the way. While startups might require less specialized team members – everyone needs to help out with every part of the process as the team is usually more interconnected – bigger teams may require multiple DevOps Champions for complex technical execution and to keep the scope of each project clean.
And here’s the great thing: once the entire team understands the culture, practices and collaboration-based work, the DevOps Champions can move to help other areas of your organization, or they can turn their focus to implementing sophisticated techniques, including ones like autoscaling, complex monitoring and high availability.
While it’s tempting to hire a team of DevOps experts and quickly deploy the technologies, there’s really no cutting corners when it comes to transitioning to DevOps. Implementing cultural change at an organization is no easy feat. But in taking the time to correctly help your team embrace the DevOps culture, one day you’ll turn around and realize that everyone at your organization is in fact, a DevOps Champion.
For more info, please visit https://www.pslcorp.com/it-outsourcing-services-companies/
All Hands on Deck: When to Bring on Extra Help with Your Digital Transformation process
March 11, 2018
AirBnB recently earned the top spot on CNBC’s Disruptor 50 list, and was estimated to be worth as much as traditional hotel giants Hilton and Hyatt combined. Nowadays, not moving fast enough to embrace a digital transformation can cost even the most well established incumbents a large chunk of their business.
However, the threat of digital disruption is not new. Most Fortune 500 CEOs will publicly affirm their urgency on setting sail on a digital voyage. Yet internally, management often finds itself at odds on how exactly to leverage technology to transform their current business model.
There is no “cookie cutter” checklist to jumpstart a digital transformation. It is a complex journey that requires: 1) a strong managerial commitment to change; 2) a radical cultural shift that allows an organization to gravitate away from rewarding risk-aversion and responsible asset management, towards rewarding innovation, experimentation, and risk-taking 3) upgrading the talent pool within a company to acquire cutting-edge digital abilities.
So once a company has embraced a digital transformation with the full support of management, and has explored specific business ideas they would like to “digitize”, how can they actually get the ball rolling and execute?
Work out exactly what your users want, and what that will entail
The digital world is built with software — an engineering feat that coordinates creativity, design, and hard engineering to make thousands of lines of code transform into a useful tool. But with the advent of the mobile digital age and “apps”, users demand that software be more than practical —they want it to be intuitive, simple, ergonomic, easy to learn, and yes, also beautiful.
Let’s suppose that the company ACME —a traditionally successful mid-market incumbent player with 30+ years in the industry—wants to start a digital transformation journey. Let’s suppose, also, that ACME has clear management support and has arrived at a promising new idea for leveraging technology to open a new line of business. Should ACME tackle the digital initiative alone? We suggest not, and here’s why.
This frontier is mired with obstacles and setbacks, that will require a particular way of building software to overcome them. For example, the new software application must be:
● Highly scalable and flexible, requiring engineering know-how to make it cloud-ready, elastic, and easily to integrate with other cloud-services
● The application must be “easily refreshable” —it should allow new features to be pumped into production several times a week without salient hitches or bugs, which requires technical skills in building “infrastructure as code”, automatic testing, and DevOps to guarantee a constant “stream” of quality code
● The application should embody modern design tenets both in usability and graphic attractiveness (which requires skills in design thinking, customer journey ideation, and modern user interfaces, among others).
Understand the strengths and weaknesses of your existing team
ACME’s current software engineering and design departments might not be up-to-date on the technologies that will allow them to successfully navigate the frontier of creativity that defines a new product. For many companies, there’s often a mismatch between the talent in its ranks, and what is required to solve the technical challenges at hand.
Established players in many industries are often quite old-fashioned in the way they manage the creative process. It is common, then, that internal marketing, customer service, or IT departments of traditional organizations are seldom prepared to collectively deploy innovation mechanisms that allow them to experiment effectively. That is, processes that allow them to think out of the box and find new ways to serve customers who are frustrated with the status quo and long for a better digital way to consume their services and products.
Companies must know when they need a helping hand
It’s hard to know what to look for if you have not lived through a digital innovation process. The quickest way to kickstart change is to learn by doing. Companies should hire not simply a “theoretical consultant or a coach” in digital innovation, but an outsourcing partner that can provide a real-life example of how to operationalize digital innovation within the company, in the form of a real product.
An outsourcing partner can help ACME’s technology department use the agile approach to software development – which focuses on being as ‘lean as possible’ and developing a minimum viable product (MVP). An initial test market will use ACME’s software and react to it, generating valuable user feedback. ACME can then take this back to the drawing board and quickly iterate on a Version 2 of the product, to be once more presented to the market. This cycle continues until ACME achieves what is called “Product-Market-Fit”.
Working with an outsourcing partner to develop a product is important for many other reasons, too. Firstly, it’s critical that an organization’s first projects in which they ‘go out on a limb’ in the digital age are successful. Early wins will generate a positive dynamic, and provide the confidence that allows management to further accelerate digital change.
And although agile requires technical skills, it also requires a change in behavior and company culture. An offshore software development partner that understands agile development behavior is a great way to cross-pollinate an agile culture to the existing organization.
And lastly, an incumbent without agile expertise will take a long time learning the ropes, potentially endangering the success of the project because of delays or loss of credibility within an organization afraid to change. Working with an experienced software outsourcing partner, on the other hand, provides a “guided laboratory” that allows both the incumbent to learn how to deploy effective software engineering practices for digital innovation, while ensuring an effective time-to-market for the particular initiative.
Undertaking an agile transformation can be daunting. But learning from an experienced outsourcing company will help an organization to quickly internalize agile engineering methodologies —and the undergirding culture of innovation that comes with them—under a learn-by-doing model. This will help them to evade the common “rookie” mistakes, and shorten the journey to a successful digital innovation.
For more info, please visit https://www.pslcorp.com