Category: Blogs

  • ‘Don’t Make Me Code’: Affordances for Developers

    ‘Don’t Make Me Code’: Affordances for Developers

     

    Thanks for listening to “Don’t Make Me Code,” a Heavybit podcast that discusses developer experience design and the unique challenges of building developer-facing products. Don’t Make Me Code is hosted by Steve Boak, co-founder and CPO at Opsee, and David Dollar, co-founder and CEO at Convox.

    In this episode David and Steve are joined by Dustin Larimer from Keen IO. They discuss affordances—the visual cues or attributes of a thing that inform you how it works – for developers.

    This podcast is brought to you by Heavybit, a program that helps developer-focused companies take their product to market.

    [soundcloud url=”https://api.soundcloud.com/tracks/251905881?secret_token=s-mL7jb” params=”auto_play=false&hide_related=false&show_comments=true&show_user=true&show_reposts=false&visual=false” width=”100%” height=”166″ iframe=”true” /]


    Steve: Welcome to “Don’t Make Me Code,” episode four. We’re calling this episode “Affordances for Developers,” and with us today is Dustin Larimer of Keen IO.

    And he wrote a really excellent blog post about how they refactored their code based on some documentation and we’re gonna get to that in a second. I think, first though, since we’re talking about affordances for developers, we need to start with what are affordances? Since not everyone may know or realize what they are. And so I don’t know if you want to kick that off, Dustin?

    Dustin: Yeah, sure. It’s a really cool concept. It comes more from product design and industrial design. We’re talking about the visual cues or properties or attributes of something that tell you how it works.

    Like a really great example, like we’ve got buttons and knobs and dials and levers all around us in our environments and when you glance at it you can kind of tell. Like, “Well, this flips up and down,” or, “I can push this in and push it out.” And so, with physical products, it’s possible to embed a lot of knowledge about how something works simply in how it looks and that’s the idea of affordance, is that the thing kind of teaches itself to you.

    You don’t have instruction manuals for coffee pots, unless it’s some kind of crazy new thing with coffee pot. Or, like, tea kettles or things like that. You know, if there is an instruction manual, it’s probably been poorly designed. Because it’s considered successful and you can just, kind of, figure it out. There’s not a huge learning curve to make it work.

    And this gets really interesting with software because we’re moving from design of physical things to the design of, pretty much, invisible things.

    Steve: Yeah, and in a digital space, we have things that we call affordances. Things that look like buttons or look like links and we’ve moved from these skeuomorphic designs to flat designs and a lot of that stuff, I would argue, is getting harder.

    We have to rely on patterns that we know and trust and I honestly can’t tell, sometimes, if that’s getting easier or harder as we get better at this.

    Dustin: Yeah, totally. Like early on things like tabs were kind of based on the little tab of a filing cabinet. Like filing sheets. Because people were familiar with those in the analog world and so it kind of transferred nicely into the screen world.

    You know, things like drag and drop were brand new back when, you know, operating systems became consumer-friendly, so how do you teach people about drag and drop? So the little mouse cursor was a hand that literally grabbed and let go of things. So, it’s kind of a transition and the skeuomorphic era was largely to introduce mainstream public to how these interfaces work.

    ‘Cause they were familiar with how they, you know, they’ve seen them before so if something looked like a big ugly dial on the screen, you knew it could turn. But then, I guess Apple’s a good lead for moving away from that with their big redesign a few years ago. They justified it by saying, “We’ve moved into a time where enough people have learned about interfaces and screens.” We have a larger shared competency around these things so we don’t really need to make things that painfully obvious and rooted in the analog world anymore.

    People have a little more capacity for figuring this stuff out and so they could move into a new world where there’s not really a lot of basis for how these things work. They just invent new patterns and it succeeds or it fails. So, a hamburger menu was one of those. Everybody agreed it worked and now they’re everywhere. To a detriment, I think. But things like that, these new languages, new vocabulary kind of goes mainstream. New words become very popular or fall out of favor.

    Steve: Yeah, and they come and go kind of like fashion. The hamburger menu, again, being a good example of that. I feel like there’s been a lot of backlash against that because of the cost of using it that we only realized after playing with the implementation of it for a while.

    Dustin: Yeah, it kind of also became kind of a crutch. People didn’t have to think so much about their information architecture because they could just hide it all behind a hamburger menu.

    And that was the mobile, a mobile invention that made it into desktop and larger screens and a lot of the usability testing around that and, sort of, analytics around things like that find that it’s not a great idea. You know, it’s not a very effective design feature to just paste in arbitrarily anywhere. You kind of have to keep thinking about things.

    David: It is interesting to think about though, because even if you do end up with a bad design, like if everybody comes on the same design, then there is some sort of value to that, right? Like, even if the hamburger menu is terrible, now that I’ve encountered my 550th one I kind of know what you expect of me here.

    Dustin: You figured that one out. Yeah, totally. That kind of becomes part of our shared vocabulary around these interfaces.

    Steve: 
    And in the digital world, it’s kind of one abstraction away from the physical world, but then dev tools feel like a whole other level beyond that. Because now there isn’t even a clicky UI, necessarily. There’s nothing to latch on to, visually.

    And that’s part of what made your story so interesting. And maybe we can start talking about that now. Like, what was the problem you were trying to solve and how you tackled it.

    Dustin: At Keen IO I’m on the Experience Team, I’m a product designer, I’ve been doing engineering, also, for a long time. Kind of both interchangeably and when I came to Keen IO I took over all of our Java Script tooling, data visualization, dashboards and all that stuff. And so, that was the first time I was ever really faced with having to shepherd along a product that’s made of code and designed for people. There’s a lot of interesting moving pieces to that. But the idea was that we could keep adding new features and tacking new things on and just calling it whatever we wanted to and sort of letting feature bloat run away and do that or we could try to consolidate and shrink the footprint.

    A big challenge is that when you’re designing a product you like to believe that it’s this really important crazy thing that people are going to spend a lot of time on and love, but then you have to recognize that you’re just one more vendor in their stack. You’re just one more thing to integrate so they can get on to doing what they really care about and you can’t afford to require people to learn about you. I think that’s going to become very competitive of developer facing companies is that time to value.

    How long does it take for me to figure out what the hell you’ve created and how to use it and how to plug it in. And so, looking at that, we started designing with that in mind first. Like, how quickly can somebody find the code, install it, wire it up with minimal impact, minimal footprint and start getting immediate feedback that it’s working. And so we can’t just keep tacking features on and expanding the docs forever, we have to start shrinking at some point. So, with Java Script SVK where I’ve put all of my time, that’s a huge factor, it’s our most popular SVK.

    Most of the data that goes in and out of Keen IO goes through that. Most of it’s coming from browser traffic and that sort of thing. So, its got to be super effective at people being able to learn it, install it, use it. And a big part of that is having confidence to know that the thing you’re using, or the way you’re using it is the right way. That’s another big one. Where a lot of things fall down. Where you’ve set it up and you’re running it, but you’re not totally sure if you did it right. The things, the names of methods, and the way that things are called. It’s sort of ambiguous and it leaves you wondering if you’re gonna get surprised one of these days, like you just did it wrong.

    Steve: And we’ve talked before on the show, too, about the importance of boiler plate code and CLI’s and examples. Like, all the things that you rely on. And so for your Java Script API, this was just all in one place, it was one giant document?

    Dustin: Yeah, it was one monolithic library. One big document. It did tracking, recording events, querying, running analysis and then visualizing it all in one monolithic pile and we started breaking those out into their own standalone libraries and we wanted each one of those to be very purposeful and effective and super easy to glance over and get it.

    So, another thing we’ve run into with SDKs is the method name to log and event or just save an event into Keen IO is called a lot of different things. Like cross different SDKs it’s add event, or record event, or push event or whatever. The common thread being events, we talked about events, which is another point of confusion sometimes.

    And so we thought, “Well, let’s just shore that up.” Let’s only say record events and let’s say it everywhere and that way when you see something that says record events you know with absolutely no hesitancy whatsoever that this is the thing you’re looking for, you’ve found the right method, this is the way to do it, it works in a predictable way.

    So it’s really consolidating our vocabulary and shrinking the footprint so that it makes our messaging more effective because it works across all these different languages and it helps us focus the message and give people confidence that they’ve found what they’re looking for.

    So they don’t have to spend hours hunting through docs and looking for examples and asking questions on stack overflow to get that assurance that, yes, you’ve done it right.

    Steve: I thought one of the interesting things about your approach, too, was the team that you put together. It sounded like they’re developers, designers, product managers, people from all disciplines in the company that got together to work on the problem. Can you talk more about how you approached it?

    Dustin: Totally. Yeah, so part of that is to do with Keen IO itself. So, we’ve always been hedged on generalists. Mission-driven generalists, specifically. Where we like to have people come in who might have some, in most cases do have some, really great specialty and competency in one important area, but have a lot of lateral interests across other areas and have spent time doing marketing or content strategy or design, in addition to engineering.

    We find people who were doing one thing in life and then became platform engineers. And so, they bring a lot of really amazing breadth to the perspective when we solve these types of problems. And so, on my team, experience team, we are part of engineering, but we’re the part that makes the API fit for human consumption. So we built apps and interfaces and tools, developer tools, point-and-click user tools, all that parts of the website that people interact with when they log in. So we own the developer experience and the, just general point-and-click user experience. We want people to find what they’re looking for and get value fast. And so, to do that, we have some amazing engineers on the team. Some really brilliant engineers.

    A lot of our stuff specializes in Java Script, ’cause that’s just the environment that we spend most of our time in, we build stuff in. But also people who have also done product management and design and content strategy and things like that in the past. So, we’re a very small team with a lot of very broad experience. And I think that important, to sort of keep breaking yourself out of the bubble where you might only see things inside of one paradigm and I think that’s where you get caught.

    Steve: Yeah, and you were talking about the need for consistency, both in the Lexicon, and in the function of the tools. And so, it sounds like you ended up figuring out a logic to break what was one big monolith into pieces. And there was some pretty logic, it sounded like, that came out of that. So can you talk about the results?

    Dustin: So the way we went about it first is we used the idea of breaking it out and having standalone SDKs for these three functions. For tracking, querying and visualization. We looked at it as a chance to, kind of, break away from some of the patterns of earlier stuff and try to build, like the ideal and then try to work our way back and make it somewhat backward-compatible. But we took the chance to really get our thinking clear first and to that.

    And that’s where the thesis and that blog post came from is if we were building physical product, we wouldn’t start building a tea kettle by bending aluminum and hammering something out in the shop. We would probably just get a big piece of paper and start sketching and start thinking through all of the different what-ifs and maybes and to really push the forum of that until we could remove all the things that weren’t necessary and we could focus on what mattered.

    We could get our thinking really, really clear. And so, we did that with these SDKs, also, where we realized that software is more or less invisible in that sense, but its form is its documentation. So we started out just sketching docs, just doing install guides, writing pseudo code for how to install and run this thing. Looking at all the different method names and functionalities people wanted and making sure it was consistent, you know?

    It’s like if you, you don’t want the situation where if you use this method, it gives you a callback with these arguments, and if you use another one, it gives you a callback with different arguments, or maybe no callback with no explanation whatsoever.

    So we wanted that consistency to become part of the vocabulary for how the thing functions. And by doing that, we came to a very, very clear spec of not only how the thing works, but how I use it. How I install it and run it and under what examples and situations. So we wrote a lot of example code. And all this was before we wrote a single line of code.

    The beauty in that is once you have that perfect clear picture of what you’re building with good rationale for why it needs to exist, putting the code together, actually took no time at all.

    Steve: Yeah, and it sounds like a lot of the code was already there and you figured out a really nice way to sensibly reorganize the documents and then you reorganized the code to fit that.

    Dustin: Yeah, yep. So we started by designing our thinking and designing the conceptual form of it and then filled in the rest. And really wrote a lot of tests before we even wrote the code itself. So that really changed the way that I thought about making software. Where, now, if I ever catch myself getting stuck on something new, I realize it’s because I’m looking at a very granular level and kind of pinning myself into a corner, so stop, drop it, back up, and start writing out pseudo code and docs for it and then it makes sense.

    You can follow the show on twitter @dontmakemecode and email Stephen and David at dmmc@heavybit.com to suggest a topic or guest for the show. You can also subscribe to all of our shows by copying this link into your favorite podcast app. Stay tuned for show-specific feeds!

  • DevOps Debates: Monoliths or Microservices

    DevOps Debates: Monoliths or Microservices

    From the time software came into existence, application software has been booming to leverage the benefit of the computing paradigm. During this cycle, it has transformed decades of design and architectural thinking, and has crossed all aspects of application development and management needs, be it configurability, reusability, maintainability, scalability or security (a good list is of these “ilities” is here).

    While many have been addressed, one “ility” that has turned a lot of eyes and attention in the last few years is deployability. More than that, it is the ability to do so continuously. This requirement has changed the thinking of building software for two main reasons: (a) Businesses have started asking to release software faster than ever, even in verticals unheard of before; and (b) Cloud and infrastructure as code has made faster deployment a easier possibility. When you look at application design with deployability in mind, given the need to be agile, what you end up getting is a microservice.

    Most applications of old style addressed most “ilities” in an architecture but did not consider “continuous deployability” as a core need as well. I call these monolith from a deployment perspective. They are tightly coupled, and for any small change a complete build of the application was necessary.

    Now the question is, Should you really look at microservice as a silver bullet to deploy all software? Should you consider that as the de facto standard to deliver any application functionality? Will applications cease to exist the way we know? Here are my thoughts. As usual, feel free to add yours or write to me personally, as some of you do as well.

    Applications as monoliths will stay as they are

    1. Monoliths have evolved over generations of design and architecture tests and stood the test of time. The focus on modular development is, in fact, a way of creating modules, which are built with separation of concerns in mind.
    2. Monoliths were built to run for a long time. It had addressed some of the “ilities” well before they became considerations.
    3. Applications will remain easier to debug, as most of the debuggable areas are in developer’s hand, instead of having to work with a team.
    4. Applications will perform better, as they can share data in memory; they don’t have to do out-of-process calls to get one task executed.
    5. Applications will be more secure, as they will be a black box from an end user perspective or even a hacker perspective, with little coming out from the system.

    Microservices will be a monolith-killer all the way

    1. Deploy, deploy and deploy to correct your problems away. Fail fast and fix faster is the mantra that you can practice.
    2. It helps bundle two-pizza teams owning microservices and hence embrace better ownership and faster response.
    3. The overall architecture to deliver an end-to-end use-case may become complex, but each piece of the jigsaw puzzle can be handled faster.
    4. In the faster-moving world, business wants to try a concept rather thinking through all the “ilities” ahead of time, and progressively make everything better. Microservices helps abstract all complexities much better.
    5. Microservices will help developers think out of box from day one, while helping business deliver smaller chunks, without having to make the system a “big ball of mud.”

    At the end of the day, irrespective of the approaches, the key is to ensure the applications are managed well, changes are refactored well, the code that is written is readable and maintainable, and significant test assets are created to regress the entire system quickly. So whether it is a large system or microservices, you are able to make any necessary changes quickly and can deploy fast.

    While microservices surely will help this new faster-deployment thinking, I—and I am sure you all—have also seen large monolithic systems that are making delivery at an astounding pace.

    Thoughts?

  • Webinar: Continuous Integration Using Docker

    Webinar: Continuous Integration Using Docker

    Simplify continuous integration with Docker. Join Marcel Birkner (codecentric), Brian Dawson (CloudBees), and Curtis Yanko (Sonatype) as they share essential tips, rules, and tools for getting your CI program started on Docker today.

    • Learn successful practices to align your organization and operations for CI success
    • Hear the key benefits of Docker-based CI
    • Receive free access to the Docker CI toolchain: GitLab, Jenkins, Nexus, Sonar, and Selenium
    Recorded 3/16/16

     

    Recording

    Slides


    [seoslides embed_id=”2b2470ce0a3f” script_src=”https://devopsy.kinsta.cloud/embed-script/continuous-integration-using-docker/13974/” overview_src=”https://devopsy.kinsta.cloud/slides/continuous-integration-using-docker/” site_src=”https://devopsy.kinsta.cloud” site_title=”devopsy.kinsta.cloud” title=”Continuous Integration Using Docker” /]

     

    Q&A Hangout

  • 5 Things DevOps is Not

    5 Things DevOps is Not

    For those who have been embracing and championing DevOps for years, the growing popularity of DevOps is as exciting as landing your first job out of college! Okay, maybe not that exciting, but still really cool. More and more companies of all sizes are embracing DevOps by including the adoption of DevOps practices directly into their fundamental strategies.

    On one side, this is giving teams the leverage they have needed all along to either begin their DevOps journey or to increase the maturity of existing DevOps adoptions. On the other side, when DevOps becomes a mandate, some of that grassroots passion can become watered down, as the use of the word becomes increasingly overused or incorrectly used.

    DevOps incorporates a new collaborative culture that embraces numerous practices combined together for a continuous software development methodology that places significant emphasis on feedback loops, collaboration and continuous improvement. DevOps requires fundamental cultural changes and includes so many practices that can be overwhelming to those just starting their journey.

    Instead of highlighting everything that DevOps is, I thought it would be good to take a step back and highlight what DevOps is not instead.

    1. DevOps is not simply combining Development & Operations teams

    We’ve all seen this one when the term DevOps comes up. “Let’s combine the Development & Operations team and, voilà!, we now have DevOps.” DevOps combines a set of processes and practices to be adopted throughout the entire delivery pipeline and spans multiple stakeholders. A couple of the key practices within DevOps adoptions include continuous integration (CI) and continuous delivery (CD). Simply combining two teams and calling it DevOps cannot accomplish those practices.

    2. DevOps is not a separate team

    Setting up a separate DevOps team is another trap many organizations fall into when beginning their DevOps journey. In general, I’m not a fan of the DevOps team as I believe it leads to more silos in the end. I’ve also found the creation of these teams can lead to further confusion when the mission is not clearly defined.

    There are some cases where a temporary DevOps team may make sense to help enable the processes and potential tooling that may be needed for adoption, but the key is making it temporary—which is often better in theory than in practice. There are several great blogs out there discussing DevOps teams such as Matthew Skelton’s blog, “What Team Structure is Right for DevOps to Flourish?”

    3. DevOps is not a tool

    Let me be the first to say I actually love the growing number of tools that enable us to continue maturing our DevOps adoptions, but I’ve noticed the use of one or two tools starts to lead to the perception that DevOps is a tool. How many times have you heard?

    “We’re already doing DevOps. We have Chef.”

    “We do DevOps. We automatically deploy through Jenkins.”

    Keep in mind, I’m a big fan of both Chef and Jenkins, but I think the power of DevOps is drastically underutilized if you’re equating the utilization of a single automation tool to DevOps success. Adopting automation and tooling is, of course, a part of DevOps, but only when combined with end-to-end practices of increased collaboration with continuous integration/continuous delivery, amplified feedback loops and continuous improvement (to name a few)! DevOps is a journey and that journey may start with a tool, but the goal should be to first identify your DevOps strategy and then find a tool or tool chain that meets those goals.

    4. DevOps is not a one-size-fits-all strategy

    Because there are so many different business drivers and technologies to consider when setting up an overall DevOps adoption strategy as well as identifying your DevOps tool chain, it’s important to apply the same tenets of DevOps to your DevOps strategy. Embrace change, gather metrics, understand feedback, fail fast and correct your course quickly. As an example, if you initially identify a tool that no longer works for your technology or environment, abandon it and move on. Just because you used it on the last project doesn’t make it a silver-bullet fix for the next one. We need to first understand our current strategy and environment, then react accordingly.

    5. DevOps is not automation

    That one may have caught the eye of a few people, so I’ll clarify: DevOps is not solely automation. Automation is absolutely a huge part of DevOps; however, it is not the only part, and deploying some degree of automation is often used interchangeably with DevOps. I think understanding the key DevOps practices is a great precursor to ensuring DevOps is viewed as more than just automation. Understanding the core DevOps principles is key to understanding the true benefits of DevOps adoption.

    There are a lot of things that DevOps is and I think I share a widely spread passion for DevOps. There are also a few things that DevOps isn’t—or isn’t solely. If you’re just starting your DevOps journey or still maturing your existing model, making sure everyone on your team has some basic DevOps education and is aware of the DevOps strategy for your project is key. It will go a long way in helping everyone understand that DevOps is about a lot of things. It’s also not about a lot of things.

    The list above isn’t exhaustive and I’m sure you all have a few you’d like to see on the list. I’d love to hear you thoughts and suggestions at @Shelbee_SE.

    You also can download and browse through the DevOps for dummies e-book.

    About the author/Shelbee Smith-Eigenbrode

    Shelbee

    Shelbee Smith-Eigenbrode is a Senior Software Engineer/IT Architect at IBM Cloud Infrastructure Center of Competency. She has worked across varying roles spanning the software development life cycle. Her experience across functional roles as well as performing that work deeply inside traditional silos has contributed to her passion for embracing the DevOps culture and transforming the way teams are delivering technologies by adopting DevOps practices. She is a member of the IBM Academy of Technology committed to driving innovation and technical advancement.

  • Interoperability’s Impact on Transparency

    Interoperability’s Impact on Transparency

    We fix what we see is broken. Providing “transparency” into the DevOps-enabled software development life cycle (SDLC) has tangential goals of quickly illuminating what is broken, running slower than it should or working flawlessly.

    Automated testing systems, for instance, are generally good at highlighting pass/fail results from integrated testing in the development process. Once they have proven their reliability, they become a de facto part of the development automation and rarely are thought of again. However, when a post-DevOps legacy build begins to take longer and longer to complete, are we able to quickly examine the runtime of our entire body of integrated tests to ensure they continue to perform within expected execution timing parameters (i.e., could the code be fine and the tests themselves be the culprit)? And is that problem exacerbated when the number of different testing tools begins to explode on the same coding unit of work?

    Connecting the dots has always been the goal of DevOps. In the ideal world, the business requirements—or the epics and stories—are part of the “dots” that remain connected or associated with each change in coding, builds, deployments and ultimately release. But are these “dots” easily transparent in each part of the DevOps continuum?

    Transparency from multiple perspectives

    To think engineers are the only audience of DevOps is too restrictive. Product and project managers are also interested in knowing “the state of change” as it relates to the business issues they are tracking, and in real time. Whether the requirement originated from a bug-fix or as a new feature, the audience of people who want to see what is where within the DevOps set of tools is not confined only to people within the development or operations of IT. The ability to provide sensible, near real-time presentation of what changes are where gives the entire organization transparency to the progress of change. It impacts every organization from customer service, to program management—executives want to know as much as casual viewers in many different business functions.

    Audit is another key driver for full transparency. Regulatory compliance is at one end of this need; corporate quality standards should be on the other. Organizations always should be more concerned with quality standards than the regulations they are subjected to. Therefore, the process of audit always drives the need for greater transparency. Imagine the ability to have “push button audit” enabled by DevOps for any change under inspection. Imagine what further cost delta this represents to organizations that are still bound to only manual methods of examination. With DevOps, not only is this possible, it also should be normal. The entire history of any change entering production should be stored by each of the DevOps tools within the journey, from ideation to implementation. All test records should be immediately accessible (and automatically associated with the particular version of change in question). Everything from failed builds to the exact time it was released into each impacted data center around the world can—and should—be available for a consolidated, push-button recollection for audit. However, the ability to make this happen often is directly proportionate to the interoperability of the DevOps tools used.

    Transparency of key data and processes

    When point solutions are selected for the DevOps tooling (defined as best-of-breed tools, with no inherent interoperability with other tools in the process), the particular functions they perform are thorough and generally complete. However, the only way to integrate key information between different tools is through APIs and/or a homemade amalgamation of the data from each point solution tool into a common dashboard. Amalgamating data is always a challenge, particularly when you consider the point of view of the audience varies by function and business discipline. If you eliminate or reduce the points of view down to only engineers (as is what usually happens), you destroy the value of DevOps transparency for every other business discipline in your organization. If you spend the labor to create a very functional, multi-perspective dashboard, your investment can be much higher than what you make in the tools themselves.

    Integrated solutions—generally pushed by the same vendor as the preferred (albeit more license-cost-heavy) solution—are not the ultimate panacea, either. While a given vendor may be able to offer tools that track requirements, construct builds, integrate testing, execute deploys and orchestrate releases, more often than not, the vendor is stronger in one discipline over the others. They may ask you (the customer) to use a limited number of tools designed for one thing to do more functions than the tools were intended to perform—which creates a recipe for constant customization and lucrative service deals for the vendor.

    What becomes important to measure in any of these instances, is the level of inherent interoperability that will exist between each type of DevOps tool in the offering. If the “connecting of dots” is inherent, and the state of change can be viewed in any of the tools, that is a win. If the point-of-view offered extends to more than just an engineer, but includes other business audiences who may have interest, that is a win. If the reporting is push-button, that is a win.

    Transparency of tool usage and roles

    But beware the dark side. Whether your organization relies on point solutions or integrated solutions, both can be corrupted by an inconsistent methodology of user profiling within the tools themselves. For example, let’s assume we have a business requirements tool, a build tool, a deployment tool and a release tool. Generally, a programmer, who we’ll call “Dave,” has a very specific role in the SDLC process that doesn’t include releasing code (programmers usually don’t release code into production). Generally, the level of granularity in defining tasks and roles within a given tool is proportionate to the rules your auditors require (whether in-house or regulatory). So for a given bank, we might define the role of a programmer “Dave” to be able to see business requirements, execute builds all day long, deploy them to the test class (or first level) of environment in the SDLC and then simply watch what happens as it progresses to production, never directly interacting again.

    One of the biggest problems DevOps tooling has is that each tool handles user management separately. That may allow me to define the roles of a programmer properly within each tool, but it does not enforce that my guy Dave is properly mapped to that role. I could make Dave a business analyst in the requirements tool, a programmer in the build tool, a deployment manager in the deployment tool, and a release manager in the release orchestration tool. This would allow Dave god-like abilities in each tool within the process. He could, in fact, create the requirement to move all our money to his account, build the code to do it, deploy it and release it into production. Dave would not have triggered any alarms in the tools, because each tool thought he was doing what he was supposed to be doing in that role. And I have never seen tools audit what role Dave is supposed to be mapped to given his job in the company or even spot-checking what role he carries in other DevOps tools to see if there is an inconsistency. Perhaps abstracting user management from the entire set of tools may be the answer—but then, who offers that capability today?

    Transparency, when properly managing access controls and particularly at the push of a button, can provide solutions—even if only after the fact—to a great number of problems that exist in our organizations and in our SDLC process. We fix what we can see is broken. If our DevOps solutions can highlight transparency from ideation to production release, we can have confidence that what we see is real and worth our attention. When our transparency varies by tool, or loses connection within the process, our confidence of the state of change diminishes and our certainty about what needs our attention goes away. Using DevOps to shine a light on our true priorities is yet another cultural change enabler we have the responsibility to pursue.

    To continue the conversation, feel free to contact me.

  • Git: One Giant Leap Toward DevOps

    Git: One Giant Leap Toward DevOps

    If you work in an organization that has not yet embraced DevOps, then you might be wondering where to begin. Fortunately, there are many good answers. But I want to introduce one simple starting point that you probably haven’t heard: introducing Git to operations. By itself, Git might not seem like a meaningful way to overcome the barriers between dev and ops. Yet, Git provides some capabilities that mark the difference between the lowest performing IT organizations and the highest. And the difference in IT performance can translate into substantial business benefits. The highest performing IT organizations have noticed the following benefits:

    • They are about twice as likely to exceed profitability, market share and productivity goals.
    • Their employees reported far higher levels of job satisfaction.
    • They realize 50 percent higher market capitalization growth over a three-year period.

    To be clear, no amount of data will ever prove that use of Git leads directly to growth, profit, productivity and job satisfaction. What the Puppet Labs’ “State of DevOps Survey” does show is the incredible range between low and high performance in IT organizations. The rate of deployment has hovered at 30 times faster for high-performing organizations over the lowest. The 2014 survey showed 50 percent fewer deployment failures, while 2015 showed 60 percent fewer deployment failures, when comparing highest to lowest. The survey also indicates which practices separate the highest performers from the lowest. According to the State of DevOps Survey, the top two indicators of high performance are:

    • Version control of all production artifacts (surprisingly, a far greater predictor of performance than version control of source code); and
    • Peer review of production changes (in contrast to external change approval).

    It’s not that these two practices magically yield business benefits. Indeed, ITIL has long recognized management of production artifacts and review of production changes as best practices. But too many organizations still believe faster deployment and higher reliability are trade-offs. What is “magical” in high-performing organizations is they realize they can have both faster deployment and higher reliability by collaborating across organizational boundaries and automating intelligently. That means dev and ops sharing goals, measurements and tools. So one way in which these practices differ from typical ITIL practices is how dev and ops perform them collaboratively. More specifically, when dev and ops use the same tool for version control, they can better share techniques and workflows. For example, the peer review of changes can include both dev and ops. Thus, Git is a gateway to DevOps.

    Git has long provided those two capabilities for software developers: Developers use Git to version source code and developers use pull requests to perform peer review of source code. With a few tips about how to apply Git to configuration files, operations can use pull requests to perform peer review of configuration changes. Now with git-lfs, operations can also version production artifacts, which often are large, binary files that historically have not worked well with Git. More advanced concepts such as infrastructure as code and dedicated binary repositories, for example, build on version control, so even if the role of Git changes over time, the skills and collaborations remain valuable.

    In summary, the business case of Git for Ops is simple. The Puppet Labs survey shows meaningful upside for low performing IT organizations to become high performing. The survey shows high performing organizations are characterized by both rapid deployment and high reliability, not picking one over the other. Two practices that characterize high performing IT organizations are version control of production artifacts and peer review of changes. Git is now well-positioned to provide both capabilities. If you’re ready to start introducing operations to Git, don’t forget that Bitbucket has no limits to the number of private repositories.

     

    About the Author/Ian Buchanan

    ianWhile Ian Buchanan has broad and deep experience with both Java and .NET, he is best known as a champion of agile methods in large enterprises. He is currently the Developer Partisan for Developer Tools at Atlassian, where he focuses on the emerging DevOps culture and the application of Bitbucket and Bamboo for better continuous integration and continuous delivery. During his career, he has successfully managed enterprise software development tools in all phases of their life cycle, from cradle to grave. He has driven organization-wide process improvement with results of greater productivity, higher quality and improved customer satisfaction. He has built multinational agile teams that value self-direction and self-organization. When not speaking or coding, you are likely to find Ian indulging his passions in parsers, meta-programming and domain-specific languages.

  • Developers Cite Startling Lack of Digital Leadership

    Developers Cite Startling Lack of Digital Leadership

    Despite app backlogs, developers say their efforts are underfunded and undertrained, and lack a priority for security

    We’ve long written about the challenges enterprises face when developing the apps they need, digging out of app backlogs and technical debt, and the overall importance of running a productive development pipeline. And, how to keep up, enterprise’s are seeing more and more citizen developers rising to fill in try to close the lag between what software apps they need built.

    Which is why it was disheartening to read in a recently published report, “Investment in Enterprise Developers is the Best Risk Management System,” based on a survey of more than 100 developers by the Application Developers Alliance, that 40 percent of respondents have experienced failed development efforts from lack of funding, and a third are concerned that current projects could be pulled for budgetary reasons. Also, despite survey after survey of executives citing security as a “top priority,” only 45 percent of enterprise developers surveyed believe that their organization sets a “high” priority for security.

    Not surprisingly, according to the survey, four out of five enterprise developers surveyed work on Windows and/or OS X, and 24 percent work on Linux. Yet only 20 percent work on mobile platforms exclusively. And, interestingly, two-thirds of enterprise developers develop their apps exclusively HTML5, hybrid or native, with native being the most common. And, not surprisingly today, cloud is the most common way to deploy apps during development, test or production.

    Unfortunately, many developers report underfunding in technology, processes and training. A third report outdated technology and processes in their organizations—more than half (51 percent) of those in organizations with more than 100 employees.

    Leadership Falling Short in Many Areas

    When it comes to cultivating processes and technology guidance, many enterprises also fall short. Only 37 percent of those surveyed said their organization has a Center of Excellence. Not surprisingly, the larger enterprises were more likely to have a Center of Excellence; however the lack of such centers is more common in North America and Europe, Middle East and Africa. Most every organization surveyed in Asia, however, has a dedicated Center of Excellence. Additionally, a surprisingly low 29 percent of of developers surveyed reported that they are required to attend training, certification programs or other continuing education.

    That’s stunning, considering that increasingly businesses are driven by their digital efforts. There’s no shortage of surveys citing this. In a recent study commissioned by CA Technologies, “The Battle for Competitive Advantage in the App Economy,” 43 percent of survey respondents said that becoming software-driven is central to being competitive today, and nearly 80 percent said that would be true in three years. Broadly, to be competitive in the years ahead, enterprises are going to have to be exceptional software companies in addition to their core current products and services. Yet survey after survey finds that enterprises are falling behind in their app development goals and are having a challenging time finding the talent they need.

    Additionally, the Application Developers Alliance survey found that only 50 percent of enterprises discuss the capabilities and skills they need to succeed, while only 26 percent integrate such competencies in their evaluation process. And, just as when it came to establishing Centers of Excellence, Asian companies stood out, with 78 percent of Asian developers saying necessary skill development is discussed.

    Centers of Excellence, the Application Developers Alliance survey found, also are excellent indicators of whether an enterprise is committed to building secure software. While 64 percent of developers believe they’re “adequately” trained to build secure software, more than 70 percent at organizations with a Center of Excellence contend that security is a high priority where they work. If they work in an organization without a Center of Excellence, that number drops to 28 percent, and 17 percent rank security as a low priority in such enterprises.

    Clearly, if enterprises expect to compete globally in the years ahead they’re going to need to step up their priorities when it comes to budgeting app development, cultivating the skills they need and building the internal organization necessary to succeed as a digital enterprise.