Every week here and in our newsletter, we feature a new developer/blogger from the DZone community to catch up and find out what he or she is working on now and what's coming next. This week we're talking to Daniel Bryant, Principal Consultant at OpenCredo and avid contributor to our Enterprise Integration and DevOps Zones. He's also an author in our Research Guide to Enterprise Integration , out now! Some of his most recent posts on DZone include:
- Crafting DevOps: Applying Software Craftsmanship to DevOps
- Implementing Correlation IDs in Spring Boot (for Distributed Tracing in SOA/Microservices)
- Issues when coding node.js usig IntelliJ IDEA “Unresolved function or method”
1. What have you been working on lately?
At my day job I work as a Principal Consultant for OpenCredo, a software consultancy and delivery company based in London, and we are currently seeing an increasing amount of work in three core areas; the migration away from monolithic applications to smaller (micro) services; the transition of applications and platforms to the Cloud; and an increase in the traditional ‘enterprise’ companies exploring the principles and practices around DevOps. The common theme throughout all of my work appears to be increasing agility and improving the journey from hypothesis to implementation, and ultimately tightening the feedback loop from a new business idea to actionable metrics and insight (which some people are referring to as ‘Continuous Engineering').
I currently spend a large amount of my time working onsite with one of our clients, notonthehightstreet.com, and here we are augmenting the existing Ruby on Rails platform with several new Java services. The combination of Ruby and Java can lead to some great development opportunities, as each platform has a unique set of strengths and weaknesses (and this also drives some great discussions here at lunchtime!). The culture at the notonethehighstreet.com is superb, and everyone is encouraged to innovate both during their day job and also through a series of hack days run throughout the entire tech team. These hack days have lead to the implementation of some very cool in-house Continuous Delivery tools, and have also driven new offerings on the main web site.
I’m also currently experimenting with Docker and Apache Mesos quite a lot, as I see these platforms as playing a key role in the future of Cloud deployments. Although the DevOps movement has made great strides in getting people to move away from treating servers as pets, I think having a framework like Mesos will help us move up another layer of abstraction, and ultimately utilise our hardware resources more efficiently.
2. You seem to identify mostly as a consultant within the EI and DevOps spaces. What are some of the most enjoyable and least enjoyable things about working within these spaces? Where do you see EI and DevOps going in 2015?
The most enjoyable part of my job is the innovation. With the rise in popularity of microservice (the latest incarnation of Service-Oritented Architecture (SOA)) there are several potential benefits being explored in terms of encapsulation, time-to-market and agility, but also a lot of challenges being discovered around testing, orchestration and monitoring. The unsolved problems in this space provide a lot of opportunity for discussion and experimentation, and like many techies I very much enjoy playing with the latest tools and then asking for comment on what I’ve created. On a related theme I also very much enjoy helping the clients I work with to innovate. In my experience it’s often easier for an external consultant to drive change, and as my career has developed I find myself enjoying the people challenges as much as the technical issues.
Due to the increasing prevalence of companies contributing software to open source over the past several years, developers like myself are now more easily able to stand of the shoulders of tech giants, such as Netflix, Twitter and Amazon. These companies have been innovating in the SOA and Cloud domain for quite some time, and have overcome many problems that we are all destined to experience with the move to distributed computing. Several projects I’ve worked on have utilised open source frameworks provided by Netflix, such as Hystrix (fault tolerance) and Zuul (API gateway), and also those of Twitter, such as Zipkin (distributed tracing) and Finagle (an RPC platform for the JVM).
The least enjoyable part of my job is cutting through the hype that our industry appears to enjoy creating. There is so much to learn, but so little time, and sorting the proverbial ‘wheat from the chaff’ can be challenging at times. For example, there many blog posts discussing the virtues of microservices and DevOps, but when you scratch below the surface you sometimes find that the authors are extolling the virtues of things they haven’t pushed through to production, or are making claims they haven’t yet corroborated with real data.
I do however believe that this is an exciting time for EI and DevOps, and the future appears to be getting even brighter as many more organisations are starting to embrace the principles of agility throughout their entire business and technology value stream. If I had to make predictions for 2015, I would say that this would be the year of microservices finding their way into enterprises of all shapes and sizes, and also the move from building platform-specific binaries to shipping full-featured platform agnostic packages as deployment artefacts (such as Packer images or Docker containers).
I also think 2015 could be the year of tooling within the EI/SOA and DevOps domains, as there is currently surprisingly little in the way of industry-accepted tools. For example, we have the likes of Spring Integration (and Spring Tool Suite) for assembling Enterprise Integration Patterns flows, and I wonder if we could have something similar for aggregating a suite of microservices to provide new business functionality. I’m also a huge fan of Jenkins for managing the full build lifecycle, but there is currently something missing in terms of orchestrating a multifaceted build pipeline of services, which are then provisioned and deployed into a target environment (and I appreciate we can assemble Jenkins plugins to do most of this, but it doesn’t feel as easy as it could).
3. Are there any particular developer tools or resources you couldn't live without?
I’m a long-time user of IntelliJ IDEA, and several of it’s variants (RubyMine, PyCharm etc), and my day-to-day work as a developer would not be quite as fun (or productive) without this IDE. The JetBrains guys really do appear to understand the needs of developers better than any other company I know
Vim is my favourite command line editor, and although it may take a fair amount of time upfront to learn this editor, I can reassure readers that this investment will return dividends in the future (particularly if they are interested in the DevOps space!)
Git has revolutionised the way I interact with SCMs, and I now shudder when I look back on some of the crazy times I spent with CVS and SVN branch merges...
I would also have a hard time doing a lot of the DevOps experimentation without Vagrant to spin up and managed multiple VMs. I’ve been using this tool since it was first released, and I really have to tip my hat to Mitchell Hashimoto, the man behind HashiCorp, who constantly innovates in this space (e.g. check out Packer, Consul and Terraform)
4. Do you have a favorite open source project (or projects) that you've contributed to recently?
Here at notonthehighstreet.com we have recently open sourced two frameworks that we have created; Aquem, which helps to remove some of the boiler plate code when writing equals, hashCode and compareTo methods for objects in Java 8; and Ratel which makes it easy to communicate Java Exceptions to the Honeybadger error-monitoring platform (primarily built for Rub applications). One of the OpenCredo developers, Will May, is the man primarily driving this open sourcing effort, and we are hoping to get feedback and contributions from the community.
I’m also heavily involved in promoting the use (and exploration) of OpenJDK, the open source reference of the JDK. I joined the London Java Community (LJC) three years ago, and several members of the group were very active in both the OpenJDK and Java Community Process, and ultimately their enthusiasm was infectious. I’ve found it great fun to explore the platform that I have worked with for over 10 years, and it’s great fun to look behind the proverbial JDK curtain to see, for example, how the Map Class has been implemented. Both Mani Sarkar (https://twitter.com/theNeomatrix369) and I regularly talk about and run hack days on the OpenJDK and Adopt-a-JSR projects at international conferences, and so if you want more information then check out the recent short video from our time at the awesome Javaland conference in Germany.
5. Do you follow any blogs or Twitter feeds that you would recommend to developers?
My regular RSS reading includes DZone, InfoQ, Java Code Geeks, High Scalability, Netflix OSS, Twitter Engineering and quite a few others I’ve curated over the years.
6. Did you have a coding first love -- a particular program, gadget, game, or language that set you on the path to life as a developer?
My coding first love was an Amstrad CPC 464 that my parents bought me for my tenth birthday. Not only did I get to play some awesome games (Spellbound Dizzy anyone?), but I also taught myself to program in Locomotive Basic. I managed to create a couple of simple games and also several utilities to help me with my school work, and from that point on I was hooked on coding!
7. Is there anything else you'd like to mention?
Yeah, I wanted to mention that I think learning is hugely important to a successful (and fun) career, and joining several User Groups was probably the best move I have made in my career. Not only did I learn lots of new stuff, but I also made many new friends, and this increased my enjoyment of working within software development exponentially.
I also recommend committing regular time to learning from books, which can appear a bit old-fashioned to younger developers, but I generally think the quality of technical content is higher in comparison with what you typically find on the web, and the learning is often focused on one particular area.
For people interested in the EI/microservices space I recommend the following books:
Camel In Action [Great discussion of EIP and the Camel framework] http://www.amazon.co.uk/Camel-Action-Claus-Ibsen/dp/1935182366
Microservices [Excellent discussion of the current state-of-the-art in microservices] http://shop.oreilly.com/product/0636920033158.do
Service Design Patterns [Good overview of the classic SOA patterns] http://www.amazon.co.uk/Service-Design-Patterns-Fundamental-Addison-Wesley/dp/032154420X
Implementing DDD [Great advice on how to model and implement your domain] http://www.amazon.co.uk/Implementing-Domain-Driven-Design-Vaughn-Vernon/dp/0321834577
And for the DevOps domain, I have found the following useful:
The Pheonix Project [Good introduction to the non-tech side of DevOps] http://www.amazon.co.uk/The-Phoenix-Project-Helping-Business/dp/0988262509
DevOps Troubleshooting [Practical guidance from the DevOps coalface] http://www.amazon.co.uk/DevOps-Troubleshooting-Linux-Server-Practices/dp/0321832043
Continuous Delivery [The classic on continuous integration and delivery] http://www.amazon.co.uk/Continuous-Delivery-Deployment-Automation-Addison-Wesley/dp/0321601912