Tag: complex enterprise

  • Moving That Big Project to CI/CD

    Moving That Big Project to CI/CD

    Any organization that has been around for more than a few years (and many who haven’t) have a massive system that would cost a fortune to replace. Most midsized enterprises have several of them. Those systems are one of the reasons that enterprises don’t adopt CI/CD at the same rate as startups. Sure, any new project or small things go there, but the elephant in the room just hangs out.

    So what happens when you get called upon to move one of these systems into CI/CD?

    Lets’ start with the easy case: the rewrite. In that case, you’re almost greenfield from the start and can build CI/CD into your development and test processes as you would for any brand new project.

    The harder case is when the org has seen the benefits of CI/CD and decides it wants to apply them to the monster that slows every project it touches to a crawl. These big systems are generally mission-critical, so there’s an added layer there. But this is doable.

    Yes, It’s Daunting, But…

    First, get a copy of the app building in a separate environment. Containers are good for this, since it’s just a development environment anyway. Replicate the entirety of the system (except unscrubbed real data, whether you use that in testing or not is a per-org question) to this new environment, make sure it builds and passes the existing test environment.

    Next, configure Dev/CI/CD tools (for a project of the size we’re talking, I recommend configuring application release automation [ARA] also to help track dependencies), and get the system building and testing under them. This will take time—time to configure the CI/CD tools, time to get the build environment to work reliably under them and time to figure out how to integrate existing test structures into the CI tool. That’s okay, the point is investing now to save later. Note that this is also the time to upgrade your dev tools. If you’re on J2EE 5, for example, it is time to upgrade. It’s been a decade, and you’re working on a copy of the project.

    Once that reliably builds and passes tests, the next step is to move those pieces into a more CI/CD-friendly format. Traditional test scripts can be called out in CI, but consciously building the tests within the CI environment is more resilient. A close look at tests, what’s missing, what could be better, what needs to stay as it is and just report back are the biggest parts of this test.

    Note that change requests will have to be copied to the new environment’s change request system, too. Some projects are lucky enough to lock out changes to the source application while the new one is brought up to speed, but for most, changes made in the original will need to be replicated. Once you start modifying code, they can no longer be just pulled from the source tree.

    Then start fragmenting the app. Apps of that size inevitably have massive functions/methods that do a lot of things. Not a terrible plan in single-processing days, but if you’re moving to CI/CD and upgrading dev tools, you may as well optimize code, too. Breaking a 5,000-line subroutine into a master and four child subroutines, each of 1,000 lines (yeah, it’s never that easy, but you get the idea) might offer room for parallelization, and definitely reduces your change footprint when you have to go in there and modify code.

    Fear Pundits Bearing Advice

    It is relatively common in DevOps for someone to offer the advice, “Get the newest of X every time.” Don’t follow that advice. Pick a version and hardcode it. It is anathema to hardcode versions of tools/OS/libraries in DevOps, but the point of DevOps is to control change, and anyone offering that advice missed the havoc that their advice would have created with the release of Python 3 or RHOS/CentOS 7.0, both cases where backward compatibility was left in favor of progress. Plan updates; don’t come in to, “The entire build failed last night,” and have to fix it then.

    By this point, you’ll have a better understanding of the app, and will know (or at least suspect) where monitoring points will be best placed. Add them in to do active monitoring instead of logging. Your first set of points won’t be perfect, and you’ll want to review them to see what improvements you can make, but the weak points of the system should be monitored at a minimum, and alerting or corrective action automatically take place.

    Test, Test and More Test

    As soon as things are stable in the new CI/CD environment, bring in beta testers from the user community to help you find issues where it doesn’t behave like the original. The point here is to copy the original first, most likely to enable faster changes in the future, so just ask users to do what they would normally do when interacting with the app, and see what happens. Anywhere there are issues is a good place to add testing (I don’t know any monolithic app that has 100 percent code coverage, and honestly have only heard rumors of new apps that do, so there’s always room for more testing at known weak points).

    Before you know it, the system will be moved into CI/CD, and you’ll have a list of things you want to improve under the new environment. At that point, you’re covered, and can move the process to replace your old build process.

    Voilá!

    It is work to move a large app into CI/CD, and more work to keep from letting it get out of hand. In the new environment, it is easy to want to change everything at once. But don’t make that part of the move; build change requests for after the move to CI/CD is done, to keep project lines clean and evaluate those desired improvements in the light of all the other change requests building up.

    — Don Macvittie

  • The One Where All the Deployments Stall

    The One Where All the Deployments Stall

    In the first episode of the DevOps story, DChip CEO Phoebe gave Chandler an ultimatum to move out of AWS into their datacenter on OpenStack. Does Chandler succeed? Read on to find out…

    Fast forward two weeks since that fateful night. Chandler is preparing for yet another leadership call. It’s deja vu, with the same story all over again. Only this time he knew the problems all too well. So he sat bleary-eyed and prepared what to say.

    Time to face the music

    The meeting involved the usual suspects. Phoebe, Monica dialed in from the US along with the sales and marketing VPs and Janice the VP of Finance.

    Strangely, or maybe it was the late hour of the night, Chandler felt calm as he spoke:

    “I want to bring everyone up to speed on the progress to shut down AWS and move to OpenStack in our datacenter. We have bad news. Enogo engineers were not able to migrate workloads to OpenStack smoothly. The problem is such that they have not managed to release a single update, and the release schedule has started to slip.”

    Both Rachel and Joey eyed him sharply. He wasn’t going to back down from the truth now, so he ventured: “Engineering sprints are delayed because of this. The real problem is the OpenStack environment. It’s not mature. Most IT operations engineers are still learning to configure it, and there are many environment issues. I understand, everyone is going to hit panic mode. Which is why, I say, we keep AWS Cloud to return to business as usual.”

    Soon as Chandler finished, the finger-pointing began.

    “Enogo engineers used CloudFormation templates in AWS for dev/test/staging deployments. Those templates, however, don’t work in OpenStack because Heat is not set up properly,” Rachel said. Adding, “We sent the templates to the Ops team, but they never got back to us.”

    “Well, when the templates are not written correctly by the developers,” countered Monica, who headed the OpenStack implementation, “we have to rewrite them from scratch in Heat. That’s not going to happen overnight, is it?”

    All the while, Phoebe, who’d hardly said a word knew that Chandler was right. The 3-month transition plan to OpenStack was too aggressive and just not practical. If more and more developers choose AWS cloud, why not join forces if we are to help them succeed?

    As a leader, you have to know when you’re wrong and correct course. So she did. “Chandler is right. We should go back to AWS to avoid schedule slippages and get the release back on track. I will discuss a longer term plan with Chandler.”

    We need a solution

    After everyone except Chandler had dropped off the video call, Phoebe said: “Look, we f*****d up. We can’t go through another f***k up and face this kind of deployment shutdown. We need a solution and fast. What do you say Chandler?

    “I can’t agree more. To minimize business risks and integrate both company systems, we need a hybrid solution that supports deploying to both AWS and OpenStack clouds. It’s not enough to simply solve for the template problem of today. It should scale for future projects. We need a solution that offers a single point of management for both clouds. The Enogo team should be able to deploy with the same speed and ease of AWS in OpenStack and not rely on IT Ops to hand-hold them.

    “Bingo,” said Phoebe at last smiling.

    The next morning as Chandler stirred his coffee trying to awaken his still asleep brain, he read this email from Rachel:
    “Hey Chandler, a couple of engineers have already written a bunch of scripts to automate deployments in AWS. I say, we devote a few more engineers and build an org-wide solution that will enable us to build and deploy in both clouds. What do you think?”

    How timely, thought Chandler. So Rachel, the Enogo engineering manager wants to build the solution in-house with her team of engineers. She wants five engineers and six months to do it. This project will no doubt widen her impact and visibility in the company. Good for her!

    Chandler sent a brief, “Why don’t we discuss in person tomorrow,” reply. In walked Rachel the following afternoon. The minute she saw Chandler’s face, her enthusiasm took a dive. He doesn’t look amused, she thought. His steely gaze sent a chill up her spine.

    Wait to see what happens in the next installment of the DevOps story coming soon from ElasticBox.

  • The One Where All Hell Breaks Loose

    The One Where All Hell Breaks Loose

    Don’t you love a good story? This one is a DevOps story in a fictional enterprise. It’s the kind of story you’ve seen replayed countless times in large organizations. So settle in for a read.

    The backstory

    DChip Tech is a semiconductor company. They’re in the business of making chips for wearable computing since acquiring Enogo, a startup in France for simulated testing in wearable technology.

    Three months into the acquisition on a late Sunday night in France, the VP of Operations at Enogo considers his late evening ahead.

    Chandler is not a happy man despite his recent appointment as the VP of Operations. How can he be? How can a 40-person company in France give him so many sleepless nights? And tonight is no exception.

    DChip’s strategic momentum in the last months had everything to do with it. To leverage the cream of the crop engineering talent in wearable tech, DChip, the San Francisco Bay area chip giant invested in Enogo.

    • Now DChip wants Enogo systems fully integrated into its OpenStack datacenter to reduce infrastructure costs.
    • Although Enogo hosts on AWS, DChip doesn’t want to integrate AWS Europe into the corporate network. They want to keep the intellectual property in the US.
    • It falls on Chandler’s lap to integrate the systems of both the companies and reorganize IT, to speed up DChip releases from once every six months to the weekly push like at Enogo. Imagine all that.

    Tall order, he thinks wryly, gulping down another cup of coffee to keep him awake for the Monday morning US time leadership meeting.

    Where all the action happens

    He dials into the video conference warily, his head already starting to throb. First to appear on the screen, Phoebe, the CIO is looking none too happy either. Soon all the division heads appear on separate screens including the engineering and QA heads from Enogo.

    Dismissing the usual small talk, Phoebe launches right to the point. We have a firm deadline to move out of AWS cloud in three months. Yet, where do we stand now? Can someone explain why the delay in integrating the systems of both companies? Do you know how much this is slowing down our go-to-market strategy?

    Monica, the Chief Architect in charge of the Datacenter OpenStack cluster, says, “We’d love Enogo to move to OpenStack today. But it’s not fully stable.”

    As if to emphasize the point, Rachel the engineering manager whose team is building the wearable emulation test software adds, “We can’t wait for the OpenStack cluster to work. Our engineers need test environments like yesterday. That’s why using AWS makes sense.”

    The marketing and sales VPs quietly watch as everyone joins in the blame game.

    Not to be left out, Joey the Enogo QA Manager complains that he can’t deploy the image that contains the emulation software because OpenStack is corrupting it. “All the more reason to support AWS,” he quips.

    The ultimatum

    I’ve heard enough; Phoebe bellows over the din of the meeting. She turns slowly to glare at Chandler through the video camera. “Chandler, do you care to explain why we have an unforeseen $100,000 dollar expense this month? I want an explanation.”

    “It’s a case of a simple, human error; it can happen to anyone Phoebe,” Chandler tried calmly to explain. “One of the devs launched instances and forgot about it until we got the bill.”

    “Yea” piped up Janice, the VP of Finance. You’ve been paying the AWS bills out of your credit card, Chandler, and then billing the company after the fact,” she so helpfully points out.

    Chandler stands dumbfounded as Phoebe’s final words struck his heart: “I told you to shut down operations on AWS. I want to move to our datacenter on OpenStack. No more bills from AWS Chandler, you hear me?”

    Her words rang late into the night and the next day.

    To be continued…

    (What do you think will happen next? Watch this space for our next episode of the DevOps story. Any resemblance to these characters or events in real life is purely coincidental.)

  • Making DevOps Work in Complex Enterprise Environments

    Making DevOps Work in Complex Enterprise Environments

    Welcome back to the staging-devopsy.kinsta.cloud series, ‘Enterprise DevOps Q&A’. Remember, if you have specific questions about Enterprise DevOps, let me know and I will try to answer them for you.

    Today’s question is:

    Q. In large enterprises, there are always environmental differences. From public cloud to internal hosting, from virtual desktops to legacy and mainframe – it is not possible to have full consistency between environments. Do you have any suggestions for approaching this gap?

    The Challenge of Enterprise Complexity

    This is a huge problem in larger enterprises, especially as DevOps practices grow beyond just isolated departmental applications. Architects have one system for prototyping; developers have a different system to code on; test and QA have their own unique ‘standard’ systems; while operations have untouchable systems for production.

    Add to this the complexity of backending into CICS or IMS applications, accessing data from DB2 or ADABAS on iSeries, or automating WebSphere deployment onto HP/UX; plus licensing for an Oracle database on AWS or an SAP client on Azure; and meeting compliance requirements for data privacy and operational security. This enterprise complexity and environmental inconsistency so often means new code is not properly tested until it hits production, resulting in unacceptable bug counts and an average annual downtime cost of almost $700K per incident!

    No Snowflakes

    Many will say that you cannot perpetuate ‘unique snowflakes’, so you must standardize environments. This dogma is easy to preach – and in principle is a best practice – but in reality it is too simplistic for most enterprises. Disparate environments often exist for good reasons (e.g. to accommodate cost, skillset, throughput, integration, or other technical requirements). In any case, you cannot simply run roughshod over established architectures. So standardize if and when you can, but realize that this path is unlikely to solve the problem.

    Abstract Platforms

    When you cannot fully standardize, you can still approach consistency by abstracting unique platforms. For example:

    Automate Complexity

    Automation can also help manage enterprise complexity to lessen the impact of environmental inconsistency. For example, solutions for enterprise-grade configuration automation or release automation can both streamline the handoff between dev and ops teams, where environmental inconsistency causes significant issues. Or adopting test automation technologies like service virtualization that can streamline development, test, QA, and other use pre-prod use cases, resulting in

    “shorter test times, increased productivity, and better production quality” by enabling complex environments to be consistently replicated on demand.

    Tool Selection Matters

    Be careful though. DevOps is not all about tools, so automation is not a complete answer; and for enterprises in particular, tool selection is harder too. For more complex enterprise environments, you will likely need to look beyond the trendy open source/webscale/startup tools. For example:

    •  Chef and Salt both claim support for Linux, Windows, and Solaris, but not AIX or HP/UX
    • Docker claims support for Linux and Windows desktops, but not for UNIX or Windows Server
    • Ansible only documents support for Windows control machines in a recent beta version
    • Most cloud services only support x86 architectures, and then only Windows or Linux
    • There is limited specific support for Mobile DevOps beyond Jenkins and some blogware
    • Only traditional large vendors support traditional large systems like IBM i or System z

    And, it must be noted, many ‘enterprise’ tools don’t support newer environments like MacOS, Azure, or Google; or don’t integrate well with a diverse toolchain.

    So when selecting automation and other solutions for your DevOps toolchain, make sure they support your environment, from mobile to mainframe, whether on-premises, hosted, or in the cloud.

    What is Your Solution?

    These are some solutions for the consistency gaps large enterprises are facing, but are just scratching the surface. I would love to hear your solutions for handling enterprise complexity within a DevOps approach. Or if you have any Enterprise DevOps questions, let me know and I will try to answer them. You can leave your ideas or questions in the comments below; hit me up on Twitter at @AndiMann; or send me an e-mail to me at andi.mann@ca.com.