Category: Blogs

  • The perfect fit: what to look for when hiring a consultancy group and how to build a lasting relationship

    The perfect fit: what to look for when hiring a consultancy group and how to build a lasting relationship

    Whether your company is just getting started or has been in business for years, selecting and building the right team makes a significant impact on your output quality, team morale and retention. If you are looking for engineers that are skilled, experienced, and a good cultural fit to step into a new or ongoing technology project, consider hiring a consulting group.

    Once you’ve determined that a consultancy group is the right solution for your business, you will need to select a company to work with. But what should you look for when hiring a consultancy group? Make sure you’re choosing the team that is perfect for your company, and how should you manage them once you’ve started working together? A selective, thorough approach to hiring and managing a team will result in exponential benefits for both your product development and overall team morale.

    Hiring the Right Team

    Look for a dynamic, adaptable and nimble team. While the specs for your project may focus on one aspect today, the next day you may discover the need to pivot in an entirely new direction. Engineers need to understand programming principles and paradigms before being proficient in any language, so make sure that the consultancy group you select has engineers that are skilled enough to easily switch languages and architectures, learn new languages and migrate to different environments, among other things.

    Assess candidates holistically.When looking for the best-fit consultancy firm, be sure to evaluate both their technical and soft skills. Carefully assess their technical abilities and make sure that the skills and experience are there. Be sure to also evaluate their soft skills such as attitude, energy, cultural fit, personality, motivation and ethics. If you cannot meet the team you will be working with in-person, try video-conferencing to get to know them face-to-face, which can help with making sure it will be a fit. Lastly, take the time to look into the consultancy group’s track record of success and what current and past clients have said about their work.

    Setting Your New Team Up for Success

    Prior to beginning the engagement with the consultancy group, be sure to communicate expectations clearly and eliminate as many questions as possible to avoid mistakes and multiple iterations. It can also be very helpful to provide your consultant with a thorough “Requirements” document, wireframes and as much context as possible to help them get up to speed as quickly as possible.

    Motivation is also key with any successful software development team and can make or break a project. Make sure that everyone understands and believes in your vision before embarking on a new project. For a longer-term project, consider switching team members between projects and technologies to allow them the opportunity work on something new and keep them engaged in their work.

    For teams working remotely in various locations, managers should provide honest, regular and respectful communication with their remote teams to build camaraderie, trust and overall passion for the project. Get the most from your team by leveraging any differences that exist, they may turn out to be your greatest advantage in the end!

    Managing your Team 

    As a manager, it is important to create an environment that allows your engineers to focus on what they do best: building software. Be sure to communicate frequently with the remote teams to answer any questions they may have during the project lifecycle and keep it on track. Use a cooperation platform or Project Management platform to organize and track the technical details of your project. Establish any parameters to work around early on and as your project progresses always communicate any changes in the desired outcomes.

    Make sure to embrace your consultants as an extension of your team. If you don’t, there will be disconnect between the teams and the relationship will not work out. Trust is also incredibly important. Consultants are highly skilled and should be able to handle projects you give to them. Also, contrary to popular belief, all consultants aren’t “yes men” and can have great suggestions for how to streamline projects or tweak certain aspects. Keep an open mind and consider what they have to say!

    The process of hiring a consulting firm may seem daunting at first, but taking the time to know what to look for will streamline the process and help you recognize what is most important when building your team. Once you select a firm, trust and open communication between your company and your new team is key. Closely integrating the two teams and fostering mutual respect between them both will help you on your way to building strong, lasting relationships and successful projects.

    About the Author/Theo Nissim

    Theo headshotTheo Nissim, CEO at Gemini Solutions, Theo is a seasoned Silicon Valley technology executive with more than 20 years of experience. He has led pre-IPO start-ups, built dozens of technical teams, developed technology strategies and driven innovative products and solutions to market. One of Theo’s many strengths and passions is managing large scale, cross-functional development efforts to high profile product releases. Theo has held executive and management positions with large public companies, Sun Microsystems and Wind River Systems, and served as the Engineering Vice President for VC funded start-ups, Digital Fountain and AdKnowledge.

    Theo has a Masters Degree in Computer Engineering from the Technion, Israeli Institute of Technology in Haifa Israel. He lives in Palo Alto, California, with his wife and twin boys

  • Tool Development – In-House or Ready made

    Tool Development – In-House or Ready made

    Tool development and adoption

    The current pace of software development cannot manage its speed without the automation.

    Automation is the most important element in order to achieve agility in delivery of the product. Every part of the software development life cycle needs tools to perform their action automatically. These phases could be coding, code review, build & deployment, environment management, resource assignment, notification and many others.

    There could be 2 options, which a team can opt for:

    • Use a third party tool
      • One can select the tools, which are available in market, either open-sourced or free. You can even buy enterprise solution if needed.
    • Build an in-house tool
      • Tool can be built or developed in-house for the consumption as well.

    Lets take look different aspects of choosing options

    • Features

    Each organization and team may have different features for different use cases. Some time it makes more sense to build your own tool just for your need rather adaption of a third-party one for which most of the features are not going to be used.

    • Time for on-boarding

    Time is definitely a big factor here, if one thinks of developing in-house tool and use it then this will definitely take time. If, need of tool is not urgent or critical, in house development option could be considered.

    Third-party tool can be immediately on boarded and there won’t be much delay other then some logistics reason.

    • Effort and Resource

    If the tool is complex, its not easy to build, one will need resources and lots of time to build it and then next challenge is implementation.

    Above effort can be reduced by adaption the tools which is available in the market. There are chances that other users are aware of the tools and training time could be reduced.

    • Cost

    Lets discuss one more important part, which is the cost. Yes, money is also one of the biggest factors on deciding what to opt for. There may be good options to choose from free and open source tools. But if enterprise tools selected, then cost may incur.

    You will need a dedicated team and resources to build the tool with in organization.

    Its hard to decide if in-house tools will be costly or enterprise. Decision has be to taken by considering long term investment and return.

    • Support

    Enterprise tools usually come with a proper support. This is really important factor if tool is very critical. Open source tools may not have enough support, as it is community driven effort. In-house tools may need resource to provide support and training in the team/organization.  Even bug fix needs to be taken care under support category.

    • Adaption/Expertise

    In-House tools are highly customize as per use case and will need proper training for adaption with in organization. In case of thirdparty tool, as I mentioned earlier there are chances that other users are aware of the tools and training time could be reduced.

    So, Adaption of tool is not an easy task. Decision has to be taken with a very strategic thought process.

    If tool is complex then it is definitely not a part time task.

    One more important thing to consider is if the team is trying to build in-house tool, which is going to be major business for somebody else then it has to be developed with proper planning and priorities, otherwise there are high chances of failure.

    Please Note- I am not considering or referring to any tooling like script or some simple UI dashboard.

  • How do large enterprises address the challenges of DevOps? Recap of my Video Chat with the DevOps Enterprise Summit Speakers

    How do large enterprises address the challenges of DevOps? Recap of my Video Chat with the DevOps Enterprise Summit Speakers

    Last Friday, I was delighted to spend an entire hour with seven leaders of DevOps transformations, discussing the practices and patterns they see for leading a DevOps transformation in large, complex organizations. It was an honor to have them share their lessons learned and tips for how large organizations address some of the challenges of DevOps: from automated testing for legacy environments, getting leadership buy-in and fostering a DevOps culture, DevOps roles and responsibilities, and security and compliance.

    Each of these experts also shared what they will be presenting on at this year’s DevOps Enterprise Summit, taking place October 19–21 in San Francisco.

    Chivas Nambiar  |  Director – Systems Engineering, Verizon

    Heather Mickman  |  Director, Target

    Ralph Loura  |  CIO, HP Enterprise Group

    Neil Manvar  |  Solutions Architect, Sauce Labs, Inc

    Tom Limoncelli  |  SRE, StackOverFlow.com

    Anders Wallgren | Chief Technology Officer, Electric Cloud

    Cornelia Davis  |  Director of platform engineering, Cloud Foundry team at Pivotal

    After quick introductions, I summarized the top five problems facing the DevOps community today – which also form the key focus areas for this year’s DevOps Enterprise Summit. At last year’s Summit, I asked that every speaker end their presentation with a slide addressing one of the two following titles: “Here’s what I don’t know how to do” or “Here’s what I’m looking for help with.” We wanted a glimpse into what the top challenges were that the entire community was facing, which we could then use as a research roadmap.

    Each speaker shared how their organizations are addressing these challenges, and gave a taste of what to expect from their talk at DevOps Enterprise Summit.

    1. How to address culture and leadership issues, particularly around transitioning and transformation

    Cornelia Davis suggested starting small, perhaps with sending some select members to work on pair programming, then have them return to bring the skills back in-house. “It’s one of the best ways of learning new programming. It’s more of a grassroots process,” elaborated Davis.

    Heather Mickman agreed, adding, “We started doing our own internal DevOps Days where we could start building momentum and showing results quickly. To accelerate adoption, we’ve created an internal DevOps dojo to help coach teams on tools and processes.”

    Chivas Nambiar suggested, “Find the leader who shares a common belief, who is close to the work and is aware of these types of technology trends. The second piece of it is you can’t do this [transformation] overnight. We’re entering our fourth year of transformation. Find your key partners, give them what they need to be successful, then share their successes.”

    When I asked, “How do I get my boss’s boss to care about DevOps?” Ralph Loura listed ways to counteract “corporate antibodies” who doubt and resist change: “The top things you need are trust, trust and trust,” he said. “To create this trust, we provide transparency through collaborative tools and pairing people together; we create and embed evangelists to help the next wave of teams succeed and spread knowledge, and help when something goes wrong; and we need data and evidence of success.

    The group discussed the balance of grassroots efforts with getting leadership buy-in, and everyone discussed the value of teams needing to create small successes in order win doubters over. Loura brought up the metaphor of the campfire: “If you start a campfire and you put too much fuel too soon, it can smother the fire. It’s important to keep it shielded at first, until the fire has enough heat to it.”

    1. How to deal with automated testing issues, specifically for legacy environments

    The conversation moved on to experiences we’ve all had with software products or services where we gave development, testing, operations, etc. to a different sourcing partner, thinking we would get better outcomes that way. Heather Mickman shared what the transition was like to go from that model to their current one, “The way we used to do software development in Target was handing off each function to different teams and centers of excellence. There were handoffs to 10–15 different teams. There was no end-to-end accountability for these once-per-quarter releases. So, as we started building out the team that creates APIs for Target, we decided we wanted end-to-end accountability, so we broke down those silos so everyone cares about the end product.” This was just one example of emergent patterns that are coming out of these complex organizations.

    1. How to address IT security and compliance issues – to get your Security team on board with your DevOps plans

    All these presenters are from large organizations who are publicly traded, and have numerous regulatory measures that they must comply with. I wanted to know more about how they work with security and compliance.

    Neil Manvar suggested that DevOps practitioners be completely transparent. He says, “Show the security teams the value, so they can get on board and that you’re not just trying to give them a hard time. Give them access to the change log and very nicely format it or link to the commit. Giving more information about what’s going on really helps with getting everyone on board. Any concerns that are raised, kind of create some automation around it and integrate that into the pipeline.”

    1. What metrics should organizations be using to track their DevOps implementation and performance.
    2. Organizational design, roles and responsibilities

    Holy cow, we didn’t even get around to discussing this last two problem areas. We will be revisiting this and the other problem areas with another group of DevOps experts in another live chat.

    When I asked for any concluding remarks with our last two minutes, Tom Limoncelli responded, “Everyone I know who’s been through this kind of transformation has said the same thing. That when you were done, when you looked back, they said ‘I never want to go back to the other way and in fact in future job hunting, the first questions will be do you have this environment?’ Having a DevOps environment can be one of your biggest recruiting tools.”

    Join the next live chat:

    How do Large Enterprises do DevOps?: Video chat with Gene Kim & the #DOES15 speakers

    Friday, September 11

    10:00 a.m. PDT

     

    Watch the replay of the video chat:

     

    To hear more from these great speakers and other DevOps luminaries, I invite you to join us at DevOps Enterprise Summit next month.

    Learn more and get your pass now at: http://devopsenterprise.io

  • Are we really back to “just reboot it”?

    Are we really back to “just reboot it”?

    The server infrastructure management style of pets vs cattle was originally coined by Bill Baker of Microsoft though Randy Bias of CloudScaling further popularized it in 2012 and revised and clarified in this presentation. Essentially the original “pets” style of server management has mainly hand-built, named, and configured servers that are heavily cared for as much time has gone into their setup while the newer cloud style of “cattle” management has servers that are often numbered and created and scaled via automation and simply removed from service in the case of any issue. Colloquially the removal is termed “shoot the offending node in the head (STONIH)”.

    In the past due to poor practices or OS service instability (NT4 comes to mind), sysadmins and developers often did not bother to figure out the root cause of issues and simply made reboots part of standard operation procedure. In the times before 24/7 global customer bases and always on broadband and smartphones it may not have even been a big deal.

    On the surface cavalierly destroying and refreshing machines misbehaving in some way seems eerily similar to reboots. It’s different this time. Really.

    Virtualization

    Virtualization itself can cause a special class of issues that are out of your control. Noisy neighbor problems, underlying VM infrastructure/network or other issues can often only be resolved by starting a fresh node (possibly in a different logical area).

    High Availability (HA)

    HA has become more ingrained in systems architecture. For most instances, without inordinate effort you should be able to smoothly take out a bad server out of a cluster or load balancer with no or minimal downtime so you’re not making your users suffer and in fact will be giving them a better experience than potentially landing on a server with intermittent or worse issues.

    Following a few proper procedures provides some important differentiation and further opportunities to investigate compared to simple reboot techniques.

    Automation and Configuration Management

    Solid automated provisioning allows you to bring up the EXACT same machine configuration, put it in a different network subnet, or tweak it to have newer OS patches or software versions for testing if needed. Recreation is not a binary choice. You have options on how you do it and opportunities to learn from it.

    Centralized Monitoring

    Monitoring has come a long way from simple CPU/Disk/Memory and service uptime. Many vendors offer deep views into your application through application performance management (APM). It’s also easier to historically dig into not just that a CPU spike occurred but which processes were hogging cycles at the time to get at a root cause. You can more readily identify if an issue lies with your application or some supporting/OS services and with good automation simply spinning up a new server to test a theory is easier than excessive pondering.

    Centralized Logging

    Centralized logging can allow easier further log inspection after the node is removed and with much better search, analysis, and correlation capabilities than opening each file in a text editor on the machine itself.

    See you later, not farewell…

    The node often doesn’t have to be destroyed. It merely can be pulled out of service or stopped. It or its virtual disks can be examined further at a later time if needed. Exercise caution with spinning up a node again if it has any behavior to auto-join a cluster/farm or will start processing jobs, sending e-mails, etc on its own. Having a practiced isolated network environment can be handy for further analysis and can double as a test bed in the case of potential security breach analysis.

    Herd away

    By following the guidelines above, STONIH will minimize the time any misbehaving nodes affect your user experience. Just don’t forget to follow-up on a root cause especially if patterns or recurrences start!

  • CI of Complex Cluster Environment with CircleCI and DigitalOcean

    CI of Complex Cluster Environment with CircleCI and DigitalOcean

    At CloudSlang, we’re passionate about all thing open source. Integrating with other open source projects is a key part of what we’re all about. We focus on integrating with many cloud native technologies, such as CoreOS, Docker, and Consul.

    As such, it is important for us to test these integrations automatically as part of our CI. But setting up a complex cluster environment (like CoreOS/Swarm cluster) using popular CI solutions such as Travis or CircleCI for testing can be tricky.

    In this post we’ll outline how we test our content integrations using a combination of DigitalOcean, CircleCI and CloudSlang. The same formula can be used to set up your own complex testing environments.

    Recently CloudSlang introduced a testing framework to write tests for CloudSlang content and run them with the Build Tool. The Build Tool’s features include grouping tests into test suites and validating flow results, expected outputs or exceptions.

    CloudSlang has a fast growing repository of content which is housed on GitHub. When a flow in the repository is changed it can affect other parts of the content that depend on the changed flow. Therefore, it was crucial for us to come up with a proper CI solution.

    After investigating the available CI providers and our configuration needs, we decided to split our test suites in two categories and distribute them between CircleCI and Travis. Both solutions are based on the CloudSlang Build Tool to validate our content: CircleCI runs cluster related test suites (e.g. CoreOS, Docker Swarm) and base content (which does not require SSH access) while Travis handles most of the Docker content and flows that require access to the environment via SSH.

    Logical Steps of the Build Process

    The process begins with working on a local content repository. The content repository contains two main folders: content (for regular CloudSlang files) and test (test related CloudSlang files). The changes could be adding new content and tests or just updating the existing files.

    After the changes are completed they are committed to a working branch. When all the commits are ready, they are pushed to GitHub and associated with a pull request.

    Any changes pushed to the pull request trigger a CircleCI build which is configured based on a circle.yml file. CircleCI builds your code using Docker containers. Currently we use a parallelism of two containers, each of them running the Build Tool. Combining CircleCI’s parallel modifier and environmental variables (e.g. node index) you can specify if a command should be executed on every machine (downloading the Build Tool) or just a specific one (creating resources that are used by only one machine).

    circle.yml

    test:
      pre:
        - ? > ### machine 0
            if [ "${CIRCLE_NODE_INDEX}" = "0" ];
            then docker run -d -p 49165:8080 jenkins
            && docker run -d -p 8500:8500 -p 8600:8600/udp fhalim/consul;
            fi
          : parallel: true
        - if eval "${RULE_DROPLET_MACHINE_NOT_FORK}"; then chmod +x ci-env/create_droplets.sh && ci-env/create_droplets.sh; fi:
            parallel: true ### machine 1
        - ? > ### every machine
            wget https://github.com/CloudSlang/cloud-slang/releases/download/cloudslang-0.8.0/cslang-builder.zip
            && unzip cslang-builder.zip -d cslang-builder
            && chmod +x cslang-builder/bin/cslang-builder
            && mkdir cslang-builder/lib/Lib
            && pip install -r python-lib/requirements.txt -t cslang-builder/lib/Lib
          : parallel: true
        - ? > ### machine 1
            if eval "${RULE_DROPLET_MACHINE_NOT_FORK}";
            then chmod +x ci-env/wait_for_droplets_and_update_test_inputs.sh
            && ci-env/wait_for_droplets_and_update_test_inputs.sh;
            fi
          : parallel: true

    On the first machine (machine 0) the default test suite is activated. It verifies the base content which includes things like working with files or string operations. This test suite does not require additional environmental configuration.

    Tests running on the second machine (machine 1) require additional configuration. In this case we are using a cluster of CoreOS machines as the infrastructure used by the test flows. We use DigitalOcean to create and manage the CoreOS machines (droplets). Each build has its own set of droplets named after the following convention: ci-{build_number}-coreos-{machine_number} so the builds are running completely independently.

    Once all the parallel executions finish running, CircleCI collects and evaluates the build result. CircleCI also publishes an artifact called execution.log which is created by the Build Tool and contains relevant logging information about the execution – which can be very useful when debugging flow executions.

    Running tests against the droplets

    The second container’s execution phases are presented in the following image:

    These steps use bash scripts to execute relevant commands. The scripts and configuration files can be found under the ci-env directory. Droplets are created and managed using DigitalOcean’s REST API. The first step (create_droplets.sh) generates a discovery URL for the CoreOS cluster and updates the cloud-config file with the newly created URL. The  cloud-config file contains regular CoreOS configuration data for the cluster (private networking configuration, starting up services like etcd and fleet) and a write_files section where we prepare a unit file (docker-tcp.socket) for the Swarm use cases (this socket will be used to enable Docker Remote API). Once the cloud-config file is ready we can create the droplets by sending POST requests to DigitalOcean:

      CURL_OUTPUT=$(curl -i -s -X POST https://api.digitalocean.com/v2/droplets \
                    -H 'Content-Type: application/json' \
                    -H "Authorization: Bearer ${DO_API_TOKEN}" \
                    -d "{
                      \"name\":\"${COREOS_MACHINE}\",
                      \"ssh_keys\":[${DO_DROPLET_SSH_PUBLIC_KEY_ID}],"'
                      "region":"ams3",
                      "size":"512mb",
                      "image":"coreos-stable",
                      "backups":false,
                      "ipv6":false,
                      "private_networking":true,
                      "user_data": "'"$(cat ci-env/cloud-config.yaml | sed 's/"/\\"/g')"'"
                    }')

    The request is dynamically generated using global environmental variables defined in the project’s properties page (DO_API_TOKEN, DO_DROPLET_SSH_PUBLIC_KEY_ID), environmental variables defined in the script (COREOS_MACHINE: name of the machine, depends on build number) and cloud-config file. The script also verifies that the requests were accepted by DigitalOcean (status code: 202) storing the droplet IDs in an array:

    DISCOVERY_URL: https://discovery.etcd.io/5f30dd91642ae055ff24efd6b2359f3d
    ci-1439-coreos-1 (ID: 6748964) droplet creation request accepted - status code: 202
    ci-1439-coreos-2 (ID: 6748965) droplet creation request accepted - status code: 202
    ci-1439-coreos-3 (ID: 6748966) droplet creation request accepted - status code: 202

    The second step (which is executed in parallel for both build machines) downloads and prepares the Build Tool. The related commands are read from the circle.yml file.

    The third step (wait_for_droplets_and_update_test_inputs.sh) waits for the droplets to become operational, adds the necessary post startup configuration (e.g. activating TCP socket for Docker Swarm) and updates the inputs with the actual information (droplet IP addresses, private key file location). The script is periodically checking the droplet status by sending GET requests to DigitalOcean:

    Droplet(6748964) information retrieved successfully
    Droplet(6748964) status: new
    Droplet(6748964) information retrieved successfully
    Droplet(6748964) status: new
    Droplet(6748964) information retrieved successfully
    Droplet(6748964) status: new
    Droplet(6748964) information retrieved successfully
    Droplet(6748964) status: active
    Droplet(6748964) IPv4 address: 188.166.45.76

    Here we combine regular bash scripting (grep, awk) with Python (for complex data processing):

              IP_ADDRESS=$(\
              echo "$RESPONSE_BODY_JSON" | python -c \
    '
    if True:
              import json,sys;
              obj = json.load(sys.stdin);
              ipv4_container_list = obj["droplet"]["networks"]["v4"];
              public_ipv4_container_list = filter(lambda x : x["type"] == "public", ipv4_container_list);
              print public_ipv4_container_list[0]["ip_address"] if len(public_ipv4_container_list) > 0 else "";
    '\
              )

    Two CoreOS machines will be used as Swarm agents (the remaining one will have the Swarm manager) so we need to enable a Docker socket for these machines. The unit file which defines the socket was created at droplet startup time based on the cloud-config file. At this stage we need to enable the socket with the following command:

      LAST_LINE=$(ssh -i ${SSH_KEY_PATH} \
      -o UserKnownHostsFile=/dev/null \
      -o StrictHostKeyChecking=no \
      core@${DROPLET_IP} \
      'sudo systemctl enable docker-tcp.socket \
      && sudo systemctl stop docker \
      && sudo systemctl start docker-tcp.socket \
      && sudo systemctl start docker \
      && echo -e "\nSUCCESS"' | tail -n 1)

    Now the droplets are ready to be accessed. While the CoreOS cluster is properly configured, the Swarm cluster will be set up using flows since Swarm is based on Docker containers (need to run manager and agent containers on the machines). The last step before starting the Build Tool is updating the test input files with the actual data (e.g. IP addresses of the droplets):

    find test -type f -exec sed -i "s/<coreos_host_1>/${DROPLET_IP_ARRAY[0]}/g" {} +

    At this point everything is prepared to run the tests. The Build Tool is executed by activating the relevant test suites. The flows in these suites interact with the droplets using SSH calls. The Build Tool displays relevant statistics about the execution – coverage, how many test cases passed and cause of the problem in case of test failures.

    02:41:58 [INFO] 97% of the content has tests
    02:41:58 [INFO] Out of 158 executables, 154 executables have tests
    02:41:58 [INFO] 
    02:41:58 [INFO] ------------------------------------------------------------
    02:41:58 [INFO] BUILD SUCCESS
    02:41:58 [INFO] ------------------------------------------------------------
    02:41:58 [INFO] Found 153 slang files under directory: "/home/ubuntu/cloud-slang-content" and all are valid.
    02:41:58 [INFO] 11 test cases passed
    02:41:58 [INFO] 145 test cases skipped

    Once the tests finish – in the last step – we need to delete the droplets used for this build by sending DELETE requests to DigitalOcean (cleanup_env.sh).

    Managing Sensitive Data

    Since the working mechanism of our build system is based on heterogeneous components we need a secure way to store sensitive data (e.g. DigitalOcean API token for authentication). CircleCI provides the possibility to define global environmental variables where we can store this kind of data. These environmental variables are not included in builds which come from external pull requests (pull requests created by users who are not part of CloudSlang organization), otherwise they could be easily obtained. Someone could print them by modifying the circle.yml file inside the pull request.

    Conclusions

    In this post we’ve show you how CloudSlang developed its own continuous integration mechanism by combining technologies like the Build Tool (the worker that executes tests), GitHub to host the codebase, CircleCI (CI solution to define the skeleton of the build system) and DigitalOcean (IaaS provider to host testing machines).

    If you would like to learn more about the build system or just check out the project, visit us at CloudSlang’s website or GitHub page.

    And remember – keep the bar green …

     

  • The Sea Change that is DevOps – How it all started: Part 1

    The Sea Change that is DevOps – How it all started: Part 1

    Over the last 20 years, software has slowly taken over the world. Businesses that historically operated on 8-hour business days are now 24×7, navigating a global economy that never sleeps. The Internet enablement of everything has thrust what was originally an important support role into the lifeline of a business.

    A decade ago, Agile software development methodology forced more pressure into the IT system by deploying software at an ever-increasing rate to the point it’s at today – where innovative companies can deploy new software multiple times a day. DevOps is at the forefront of addressing the question of how IT deals with these problems, but like Agile before it, there’s a learning curve.

    In this two-part series, I will discuss how the IT world worked before DevOps and how development and operations teams united to adopt more Agile practices.

    How things were

    Before this sea change, a company would hire IT professionals who would purchase and configure servers, place them in a data center, copy mission critical software onto them and with some help from software engineering, get things running. After some quality checks, the IT team would lock down the datacenter controlling both physical and virtual access and “let things run.” The common way to provide stability was simply to not let anyone touch anything, as most problems have been (and still are) self-inflicted wounds. Keeping the system “static” kept a lot of problems from surfacing. The software was probably not more stable; you just didn’t find the problems as fast.

    In this world, IT professionals had a feast and famine existence. If a new service deployment was happening (usually every 3 to 6 months) it was an all hands on deck activity reminiscent of a rocket launch. The same manual deployment would happen, along with software engineering, database engineering, etc. Data migration would occur, new software would be installed, and the system would manually be brought back up. In the event of a software problem, or data migration problem, the team could elect to rollback and bring the old software back up. If things went well, then again some basic end-to-end quality assurance would take place and the new software release would be unleashed on the world. More progressive companies would do this for part of the system, diverting traffic to avoid perceived downtime. It would often take an entire night to do a new service release, and companies generally did them at night because downtime was not unusual.

    Then software development changed

    The competitive landscape that the Internet created along with the now ubiquitous SaaS business model made companies recognize that their ability to innovate the product was a competitive advantage. A lot of companies had adopted Agile software development practices in response to the increasingly high failure rate of larger efforts. Part of Agile is creating smaller development efforts that get code functional faster, reducing the size of the endeavor. This is commonly referred to as a “software sprint.” This promise of innovating the product faster was very alluring, especially to Web 1.0 companies that were now in feature battles with more nimble Web 2.0 companies who had more quickly adopted Agile. It was becoming more and more evident that the problem was shifting from an issue of creating software fast enough to deploying the necessary code in an expedient manner.
    The big problem was the deployment stage of the process. IT teams were accustomed to changing production systems every three to six months. This combined with a trusted model that largely kept software developers out of production systems, effectively nullified any Agile gains in SaaS businesses. In other words, half the product development cycle had been fixed with Agile, but the other half deploying the software had not yet caught up.

    Operations as a changing landscape

    Major changes were also occurring for operations inside companies, many of which were driven by the development side of the house.

    • Virtual server technology started to get major traction within production environments. This allowed teams to treat servers as software. You no longer had to run the operating system and application on a physical server, you could run them on a virtual server (that ran on physical servers). The configuration of servers that, by hand, took an incredible amount of time, could essentially be defined once and then cloned, the same way you would clone a file. Deploying a new server was much easier, and a corrupt server could simply be deleted and reborn in minutes. All these virtual servers could be managed by a single piece of software called a hypervisor, with which creating a new “server” would take a minute, when it used to take weeks.
    • Puppet and Chef were born. At the same time development organizations, recognizing this major problem with deployment, started addressing the production configuration problem with tools such as Puppet and Chef that essentially allow software and IT teams to codify the configurations of virtual and physical servers and deployments of new code. This allowed for repeatable processes that could be rapidly done and redone. No longer did your IT team have to install software by hand, instead they could code it.
    • Continuous integration and delivery enabled software teams to use newly developed tools like Jenkins to do nightly software builds, perform unit tests of parts of the software and automatically deploy software into production. All of these tasks had been highly manual operations historically and fraught with mistakes and inconsistencies. Codifying these steps would give way to deploying software within minutes or seconds rather than days or hours.

    Most importantly, all of these efforts were largely driven by the development of more progressive operations in the company. The operations side of most companies was never conceived as a “maker” culture; the handwriting was on the wall – operations had to change or it will would have become a victim of this revolution. I’ll take a look at some of the resulting changes in the second part of this series.

  • Where will DevOps be in 10 years’ time?

    Where will DevOps be in 10 years’ time?

    What will the DevOps landscape look like in 10 years’ time? Ten years ago, Agile was seen as new and different. Now it’s part of everyday life of most developers. Will it be the same with DevOps? It’s time to clasp the crystal ball and unravel where the future is headed.

    First things first. DevOps is here to stay. The overwhelming trend towards the digitization of services accelerates the need for agility and shorter release cycles with DevOps as an invaluable building brick: think the Uber vehicle booking service, the Airbnb property rental service—even Amazon’s move to take the terrestrial version of Top Gear and launch it as a digital-only, on-demand broadcast service. Services are going digital. And so are companies: banks, retailers, telcos and others are increasingly positioned as software-driven businesses where IT makes the difference.

    These organizations will need to develop and deliver compelling, customer-centric apps quicker than ever before. Agile development will become the battle cry of every business. Dev and Operations teams will increasingly need to shake hands in a middle ground of rapid development and reliable, high performance services delivery.

    At a technical level, DevOps enablement will be driven by increased public and private cloud adoption: Infrastructure, Platform and Application Service Clouds are all important enablers for DevOps practices. Moreover, DevOps will also grow through the replacement of IT Operations Management tool chains – including automation, monitoring and service management – from non-DevOps to DevOps-enabled and DevOps-ready tools.

    If agile is a journey, DevOps can be seen just as another part of it; one, that suits companies, which successfully completed the first phases of agile transformation and are now looking at ways to further enhance their agile maturity levels and accelerate releases. The increased adoption of agile development methodologies and the increase of related maturity levels thus will also fuel growth. Gartner, for example, has indicated that agile development is essential for mobile application development, arguing that the traditional methods used to define and develop desktop applications will not work with mobile application development.

    Still not convinced? Then how about this. Research by Computing in the UK shows that 30% of 300 organizations surveyed in the run up to the 2015 DevOps Summit had either started to implement a DevOps strategy or had already merged Dev and Ops, with another 13% planning to go down this route.

    Awareness of existing DevOps success will also fuel this continued growth. Recent research, for example, shows that high-performing IT organizations are deploying code 30 times more frequently with 50% fewer failures using DevOps practices. And demand for DevOps skills is soaring too: DevOps engineers are among the highest paid IT practitioners today, according to APM Digest.

    Make no mistake, the software delivery chain will continue to accelerate and change cycles will shrink. In many competitive scenarios, an advantage can only be sustained through organizational agility. In fact, agility can make such a competitive advantage sustainable. Since IT is so important already in the “legacy” enterprise and becomes even more so in the digital economy, existing IT systems and methods will need to move towards agile.

    Here’s another thought. I predict that within the next 10 years the split of ‘Mode 1’ and ‘Mode 2’ companies will disappear. Mode 1 is the traditional approach to development, emphasizing scalability, efficiency, safety and accuracy. It’s the blueprint for how IT Operations works. Mode 2 meanwhile is non-sequential, emphasizing agility and speed. And it requires new thinking and processes around issues such as investment management, governance and collaboration.

    It will disappear for two reasons. First, distinct cultures and operational modes are not sustainable within the same business. Second, if agility is not a requirement, the service should not be operated within the boundaries of the firm for strategic reasons. Own “mode 1” operator companies should be used to outsource non-differentiated IT services.

    In due course, bimodal IT will flourish within organizations, servicing two modes of IT, each designed to develop and deliver information- and technology-intensive services in its own way. Success in both modes demands smarter, more flexible tools that support today’s complex IT operations. Bimodal IT is not without its risks and challenges, but it will be increasingly powerful in helping companies meet ever-growing customer expectations. DevOps will help firms help them bridge these two modes.

    Market demand for DevOps skills will continue to grow too in the next 10 years. Research indicates that DevOps engineers are among the highest paid IT practitioners today and aggressive hiring of people with DevOps expertise will continue in the years to follow.

    One final, more controversial thought. In 10 years’ time, we might not even be talking about DevOps anymore. By then, all stakeholders will understand how to work holistically to achieve business value through the end goal of delivering high quality applications and services to customers. So DevOps might even become redundant. But continuous delivery will be the norm.

  • App Dev: Stop Spinning Wheels on the Spinning Wheel

    App Dev: Stop Spinning Wheels on the Spinning Wheel

    When it comes to websites and apps – speed matters; today’s consumers want everything yesterday. Recent studies show that there is no surer way to lose the trust of a consumer than to produce an app with sluggish performance. Recently, Amazon reported that for every tenth of a second of latency, sales decrease by one percent. Furthermore, almost half (48 percent) of consumers stated that they immediately uninstalled an app after slow performance. That’s a huge cost that translates directly to the bottom line.

    Today’s websites and applications are hyper competitive when it comes to user experience (UX). Consumers are educated – and if the digital experience isn’t engaging and effective, they will leave for a digital channel that does deliver that experience.

    The problem lies in the collaboration between UX designers and line of business teams. UX designers load up their sites and apps with cool content and hot third party JavaScript for a strong visual appeal. Following that, teams who are looking at competitor’s digital properties ask for even more content to be added in hopes that the app will be even more useful. Unfortunately, with this strategy, the end result is an incredible experience that probably performs somewhere between “eh” and “terrible”. Off go the consumers because the one thing they hate worse than something boring? Something slow.

    So, it’s tough being a designer; contrary to popular belief, the reality is that web loading speeds on average are actually getting slower on a global scale. As more users flock to social media, and ecommerce sites to get their fix of images, videos and interactive plugins, web speeds have been plummeting. Factor in that 50 million people in the U.S. now watch streaming video on mobile phones, and the issue become clear. High-speed Internet is no longer enough to get content to consumers in a timely manner. In fact, you have to assume high speed is irrelevant because so much interaction is now “over the air” mobile.

    The question now becomes, what can designers, developers and organizations do to maximize experience and keep things fast in a world where performance is slowly degrading?

    Testing is Mission Critical

    It’s not rocket science that before a website or app is released into the wild, it needs to be tested and then deployed it in a way where it can be monitored to check it for performance issues, or any bugs that might annoy users into never looking at it again. The “it will get better” model of the past is dead. You have to get it right the first time.

    However, testing and monitoring once isn’t enough; because there are so many variables that are introduced by 3rd party content – from a paid ad slot to an image to logins for social accounts to all the various marketing tags. A failure on the part of any one of these sources can damage performance. Furthermore, those third party bits are part of long chains of infrastructure themselves– with lots of exposed weak points. If your third party social media login JavaScript object can’t communicate to its house – or the pipe it’s house uses to talk to Facebook is down, all the consumer knows is that they won’t be back.

    As good of an idea as it may seem to drop in one more marketing or advertising capability to increase the revenue generated by applications, it needs to be tested and monitored first to make sure it doesn’t have the opposite effect. Without fully assessing the risks associated with the addition of these services, it’s hard to evaluate whether it will help or hurt the business.

    Finally, be sure to load test at different traffic levels. It can be easy to focus testing on best-case scenarios, but be aware that once released, apps need to perform under a whole host of different network conditions.

    Keep It Simple, but Don’t be Stupid

    Design is always a balance between the desire to give consumers more functionality and a more interactive and friendly UI. For many organizations, this means coming up with something snazzy, and then having developers and operations make sense of it to enable performance. So – often to avoid potential points of contention – the bias drifts towards being safe and ensuring performance at minimal cost.

    Ultimately, the best experience will equal more sales, more views, more consumers, and better ROI. It actually is rooted in economic fact – the experience can and will drive more revenue, but only by investing in support.

    So, how do you maintain and stretch experience without blowing up performance? The key is being predictable by spending time on research, evaluating different options and constantly testing them to see what provides the right balance of experience and performance. Just because you have been using the same social media JavaScript object from a well-known source doesn’t mean you shouldn’t always be comparing it against other alternatives. And given that at least 30% of web pages come from third parties, this means there is a lot of continuous monitoring and research to do.

    Scientific Method

    Ultimately what we are doing here is taking the artist’s mindset of maximizing creativity, and applying the scientific method. Researching all those third party options and checking their performance – before presenting to the DevOps team – provides the ammunition to show that it’s possible to affordably deliver great performance and a great experience. Then, partnering with DevOps to constantly monitor third party content makes sure that at the first sign of degradation, backup providers are waiting in the wings to be deployed.

    About the Author/Adam Thier

    adam-thierAdam Thier is the Executive Vice President of Engineering at Keynote Systems. He brings Keynote over 25 years of software development and product experience ranging from a number of successful startups through engineering leadership roles at industry leaders such as SAP. In particular, he is an expert in analytic applications, predictive analytics, massively parallel in-memory databases, and columnar store processing.
     
    Prior to Keynote, Thier was the Senior Vice President of Frontline applications at SAP, and prior to that ran development for Hyperion’s applications portfolio prior to its acquisition by Oracle. Thier is an avid proponent and practitioner of design thinking and credits most of the success of the products he has been responsible for to deep engagement with customers and continuous co-innovation.  Thier has a BA from Marist College.
  • The 3L rule, a general piece of advice

    The 3L rule, a general piece of advice

    What I am going to describe will sound elementary to most of you, even trivial but I know that there is a difference between being aware of something and actually doing it.

    I have been working hard to spread the DevOps word these last few years and through experiences, project, conferences and articles I have come up with my very own little personal piece of knowledge; what I call the 3L rule.

    Learn from the world.

    This is the easiest of the three. Use Bing, Yahoo, Google, blogs like www.devops.com, specialized websites, books and everything you want. The world is now at your reach, thanks to the internet and the wide spreading of smartphones. How many persons in the bus or metro around you are watching a screen nowadays? How many of those are actually watching the screen and learning something new? I know I see many playing cwazy cupcakes or any other game that is a time killer. However, they are exactly that, time killers.
    Why would you want to kill time when your brain is most likely craving new knowledge, begging to use it for more than just identifying a simple pattern on a screen, dodging monkey poop or even cutting fruits? On a personal note, if you really feel like a samurai, go cut some fresh fruits and make yourself a nice juice.
    The internet is available to you at all times with an almost infinite amount of information to collect. I am not telling you to stop playing, I am a hardcore gamer myself, but for your brain’s sake, you have to diversify activities. Do not always play, your brain is a sponge, make it absorb data or it will go dry.

    Learn from those around you.

    This one is a bit harder; it requires a couple of things:
    – Some attention span: it is not always easy to be ready to listen to someone when you reach your tenth hour of meeting of the day (but then maybe you should learn to better plan your days) but try to make an effort. Many might disagree with that but most meetings have a message to convey. It might not be the main topic but a well-driven meeting can be a valuable source of information. To figure it out, the only way there is, is to actually listen to the person talking.
    – Empathy: some persons struggle to get their message through, not matter how important it is. That is where you should try to demonstrate what might be a new skill: empathy. Instead of watching the speaker desperately and painfully trying to make a point, why don’t you try to help him/her. Do not jump in with what you know, that is stealing the light, instead why don’t you ask a question to put him/her back on track? It’s super easy and by making a human contact (mute people in meetings can be scary), you create a link with the presenter and might relieve some of the stress.
    – Capacity of analysis: people do things around you, all the time. They work, they speak; they create value. If you are at the office right now (you should not be reading this but please continue), look around you. Take a quick break and go ask one of your teammates what he/she is doing and why. You might actually learn something. Do this repeatedly until you got the whole picture of who does what. Then try to wonder why and repeat the process many times until you reach the big bang. Through every single iteration, you will most likely learn something new. Forest Gump used to say: ”life is like a box of chocolate: you never know what you’re gonna get”. I prefer to think that life is like a puzzle, it is up to you to put the pieces together.

    Learn from yourself

    The hardest of the three rules.
    You are flawed. Humans are flawed and make errors. What makes us worth something though is that we can actually learn from our mistakes. Once again, the big question you should ask yourself when facing an error is why.
    Why did that happen? Was there an error in the process? Did I misunderstand something? Do I lack knowledge or skill to perform that task? Did I not get enough time to perform that task? Ask yourself all the questions you need until you can come up with a definitive answer.
    When you do, that is where the tricky part starts. If you are to blame for the problem, make sure that if you were to redo the same task there would be no chance of the same error happening again. Fix the process, correct the documentation, train yourself, speak up! If this is someone else’s fault, do not point fingers, you are not in third grade anymore, instead help that person to do a better job so that, in turn you can perform your task as expected. Who knows, that very same person might help you one day.
    The problem with that rule is to admit that you might make mistakes. Once again, humans are flawed and it is only normal to fail every now and then. Some of the greatest things were invented by mistakes: the tarte tatin, corn flakes or even the microwave oven. Maybe you will create something life changing too.

    While that 3L rule should not surprise anyone, especially people in IT where learning is key, I find it a good reminder and always recommend everyone to apply it. It works very well in our domain since it is evolving so fast but it can be applied to everything really. Try the last rule with your better half for example, this might prevent conflicts to come like another fight about why you washed a pair of black jeans with his/her white underwear.

    Good learning!

  • Does MariaDB replace the “M” in LAMP

    Does MariaDB replace the “M” in LAMP

    If you were starting a new application tomorrow, which backend would you use? Chances are you said MySQL. However post Oracle acquisition MySQL has changed. After Oracle purchased the code they broke the hearts of many. And there is hope that MySQL has re-invented itself in the form of MariaDB

    (more…)