Well the deed is done. I finally have migrated the blog off my home server and onto a hosted provider. The site is finally starting to get big enough that I felt like a migration would be a step in the right direction. When I originally created this blog it was more of an experiment than anything else, but over the past 2 years I have seen the blog and my writing grow in directions I really didn’t anticipate when it was created, which is very exciting for me.
Due to this growth, one of my main concerns is stability. With the stage that this project is in now I just want a place that has good bandwidth and is available 24×7 when I want to write something. I don’t want to have to worry about the power going out at my home or any sort of service disruption to my internet to cause my site to be unreachable. My traffic numbers are relatively low if compared to some other popular websites but they aren’t anything to sneeze at either now that the blog and my writings have become more established and so it is important for me to have the site available all the time to people. If you’re interested in the migration comment or send me a note and I can do a quick write up or go into more depth, but I figured I’d spare the details because there are already a number of good guides out there on how to do it. The only real issue was upgrading from Apache 2.2 -> 2.4.
I’d like to take some time and talk about moving to a cloud provider. It may be an unfamiliar process to some so there might be a few good takeaways by covering the topic briefly. Cloud hosting and cloud technologies are evolving to be much more than just a fad, and a lot of companies are trying to position themselves for the next generation of cloud computing moving forward. Choosing a cloud provider offers a number of benefits including lower over head and maintenance costs with running servers and a data center. It also alleviates infrastructure maintenance, stability issues and dealing with hardware failures and troubleshooting.
There are a very large number of cloud providers out there currently and the competition is fierce. In fact the competition is so fierce right now that Google and Amazon have recently begun a price war.
Heroku
Amazon AWS
Joyent
Azure
Rackspace
Linode
DreamHost
Google Cloud Platform
Digital Ocean
In my current view they are all great in their own way. By that I mean that each of these providers can provide value in their own way. If you are a business looking to move to the cloud the AWS is the way to go. The Amazon cloud has been tested and vetted by some of the largest cloud companies (Netflix, Pinterest, LinkedIn). It has been around for a very long time in cloud years so Amazon has been able to work out most of the issues as well create a golden standard. The trade off is that for somebody new to cloud computing the services and interface can be confusing. There are a lot of bells and whistles, which many people do not need.
If you’re a Microsoft shop you might take a look at the Azure platform. Azure does a really good job of integrating with other Microsoft products and services. This would be a logical move for anybody that leverages Microsoft technologies.
Rackspace and Joyent both leverage OpenStack for their underlying architecture. OpenStack is open source software so there are some really interesting things revolving around that platform and technology.
Ultimately I decided to go with Digital Ocean for this project for a couple of reasons. First, the price was there. My blog doesn’t require a lot of horsepower so I was able to spin up a 1GB, 1CPU, 30GB, 1TB bandwidth Ubuntu server on DO for $10/month. The second reason that I like DO and which many other people are moving towards DO is that the setup and configuration process is stupidly simple and easy. Create an account, setup a credit card and away you go, up into the clouds. The process from start to having a new server up literally took me 10 minutes.
That is the beauty of DO’s approach to cloud. Make things as simple as possible for people to get up and going. Certainly there aren’t nearly as many features as many other platforms but for many scenarios people just want a server to play around with, and DO does a great job of making that possible.
The point I’m trying to get at here is that there are basically different tools for different jobs. You need to evaluate what all is out there and how it will suit your needs. If you aren’t a Microsoft shop then you might not need to use Azure. The good news is that with all of this competition and rivalry prices are dropping and more options and niches are becoming available as products mature and as new providers enter the scene. The cloud introduces some pretty neat features and technologies but ultimately you need to decide what you or your business is looking for before you make a decision.
Since landing myself in a new and unexplored terrain as a freshly minted DevOps admin, I have been thinking a lot about what exactly DevOps is and how I will translate my skills moving into the position. I am very excited to have the opportunity to work in such a new and powerful area of IT (and at such a sweet company!) but really think I need to lay out some of the groundwork behind what DevOps is, to help strengthen my own understanding and hopefully to help others grasp some of the concepts and ideas behind it.
I have been hearing more and more about DevOps philosophy and its growing influence and adoption in the world of IT, especially in fast paced, cloud and start up companies. From what I have seen so far, I think I people really need to start looking at the impact that DevOps is making in the realm of system administration and how to set themselves up to succeed in this profession moving forward.
Here is the official DevOps description on Wikipedia:
DevOps is a software development method that stresses communication, collaboration and integration between software developers and information technology (IT) professionals. DevOps is a response to the interdependence of software development and IT operations. It aims to help an organization rapidly produce software products and services.
While this is a solid description, there still seems to be a large amount of confusion about what exactly DevOps is so I’d like to address some of the key ideas and views that go along with its mentality and application to system administration. To me, DevOps can be thought of as a combination of the best practices that a career in operations has to offer with many of the concepts and ideas that are used in the world of development. Especially those derived from Agile and Scrum.
The great thing about DevOps is that since it is so new, there is really no universally accepted definition of what it is limited to. This means that those who are currently involved in the DevOps development and adoption are essentially creating a new discipline, adding to it as they go. A current DevOps admin can be described in simple terms as a systems admin that works closely with developers to decrease the gap between operations and development. But that is not the main strength that DevOps offers and really just hits the tip of the ice burg for what DevOps actually is and means.
For one, DevOps offers a sort of cultural shift in the IT environment. Traditionally in IT landscapes, there has been somewhat of a divide between operations and development. You can think of this divide as a wall built between the dev and the ops teams either due to siloing of job skills and responsibilities or how the organization at broader perspective operates. Because of this dissection of duties, there is typically little to no overlap between the tool sets or thought process between the dev or ops teams, which can cause serious headaches trying to get products out the door.
So how do you fix this?
In practical application, the principals of DevOps can put into practice using things like Continuous Integration tools , configuration management, logging and monitoring, creating a standardized test, dev and QA environments, etc. The DevOps mindset and culture has many of its roots in environments of rapid growth and change. An example of this philosophy put in to practice is at start up companies that rely on getting their product to market as quickly as smoothly as possible. The good news is that larger enterprise IT environments are beginning to look at some of the benefits of this approach and starting to tear down the walls of the silos.
Some of the benefits of DevOps include:
Increased stability in your environment (embracing config management and version control)
Faster resolution of problems (decrease MTT)
Continuous software delivery (increasing release frequency brings ideas to market faster)
Much faster software development life cycles
Quicker interaction and feedback loops for key business stakeholders
Automate otherwise cumbersome and tedious tasks to free up time for devs and ops teams
These are some powerful concepts. And the benefits here cannot be underestimated because at the end of the day the company you work for is in the business of making money. And the faster they can make changes to become more marketable and competitive in the market the better.
One final topic I’d like to cover is programming. If you are even remotely interested in DevOps you should learn to program, if you don’t know already. This is the general direction of the discipline and if you don’t have a solid foundation to work from you will not be putting yourself into the best position to progress your career. This doesn’t mean you have to be a developer, but IMO you have have to at least know and understand what the developers are talking about. It is also very useful to know programming for all of the various scripting and automation tasks that are involved in DevOps. Not only will you be able to debug issues with other software, scripts and programs but you will be a much more valuable asset to your team if you can be trusted to get things done and help get product shipped out the door.
I run across a lot of articles and posts that talk about how a degree in Computer Science is usually irrelevant to system administration and that you are just as well off with another degree or no degree at all. I think that line of logic is very short sighted and today I am going (or at least attempt) to explain why. By no means am I criticizing these approaches, in fact I believe in the logic that there is more than one way to skin a cat, and I have found many other highly successful admins that have reached their positions by these alternate means. I just want to quickly clarify that I am not advising readers that taking the CS route to becoming a system admin is the only, right way to go, I am simply relating my own experiences in system administration to my background in CS and making a case of why pursuing a degree in Computer Science, or any other degree in engineering for that matter isn’t going to hurt your chances of becoming a sysadmin.
When you think of Computer Science you think of programming or maybe math, at least I do. Most CS programs these days have a heavy orientation towards programming and the scientific and mathematic applications of programming as it applies to the world around us. As an aside, I am beginning to see many more programs that are tailored to specific disciplines inside the realm of IT which looks promising. This is a great hybrid approach in my opinion because it gives students a chance to look at a few alternate options. Coding isn’t my passion so having an option to become a system administrator without the amount of intense coding from a CS program looks like an attractive approach.
It is true that many of the mundane daily tasks related to system administration don’t involve 8 hours a day of reading and writing code. Because of this I think it is important to characterize and distinguish a sysadmin as somebody who relies on software tools and programming to solve problems and technical challenges but doesn’t necessarily devote all of their time and energy to living in and interacting with code. The relationship of the sysadmin to programming is more of an indirect one, though still very important.
The farther along I wander on in my journey as a sysadmin the more I realize how the CS background is helping me. I have a solid foundation in many of the core concepts that were taught through the CS program, which in turn have indirectly influenced my abilities as a system administrator for the better. The first and most valuable asset my CS background has given me is the ability to write and understand code. This is extremely useful in my daily slew of activities. It allows me to approach problems with a programmatic methodology, it allows me to automate redundant and repeatable tasks with scripts, it gives me intuition into why databases or programs are slow, it allows me to debug issues systematically, and on and on. Obviously these skills can be learned elsewhere but having them rolled up into your education when you learn about Computer Science as part of the package deal is very convenient. I would much rather have this set of skills and have the ability to look at things from a different perspective than have to learn each of these techniques separately. There is no way that somebody coming from a business or other similar background will know about silly things like big O notation or how different algorithms work at a fundamental level, it just isn’t part of their background so they don’t spend time thinking about these things.
This really parlays into other areas well and you are setting yourself up for a diversified and broad horizon for future employment prospects. For example, take a pure sysadmin that knows no programming or CS; at their core they know system administration. But what if they either get burnt out (which is common in this profession) or they don’t keep up the skills to match their position? There is nowhere in the industry for these individuals to turn, unless they want to go into management. That is why I believe individuals that choose not to further their careers are essentially crippling themselves and their future prospects by not knowing how or learning to program, or to at least understand how system administration and programming can relate to each other. With a diverse background the CS sysadmin could potentially move into a Devops role, a pure programming and development role or a management role. With the diverse IT ecosystem, programming and development skills are very much saught after and so the demand is high for these other types of positions and sets of skills.
Another well known fact in the IT industry, which I don’t necessarily agree with but nonetheless exists, is the fact that just having a CS degree will open doors that may not otherwise be open without a degree. I personally believe that a degree shouldn’t dictate your position but by having a degree you set yourself up for some unique opportunities and certainly are not hurting yourself. For example, all other things being equal, somebody scanning through resumes has to select an individual applicant that either has a degree in Computer Science or a degree in Philosophy. Which do you think will be picked? Like I said, I don’t think the hiring process is fair or even has anything to do with skill but can be used as a way to get ahead of the competition in the hiring process and can therefore a degree be valuable by itself as well as viewed as a strategic component in the hiring process if nothing else.
Here’s what I am saying. You don’t have to have a degree in Computer Science to be a great System Administrator. But the CS background definitely equips you with the tools to both understand some of the more abstract technical concepts and ideas and give you a robust framework working through and solving these difficult and complex problems. Ultimately the most important factors in being a good sysadmin (let alone anything else) is a combination of many different things, including a willingness to learn and the amount of experience an individual possesses. There is no cookie cutter way to build the perfect sysadmin and you will invariably find a very diverse group of people in this profession, but a head start with a CS degree is certainly one path that won’t hurt you and is a good attribute of many good sysadmins.
It is the time of year again to reflect on some of the things that happened during 2013. As usual, it is impossible to predict what will happen in the future and what kinds of experiences will shape you and what kinds of difficult challenges you will encounter and overcome. Luckily in 2013 there weren’t any challenges that I wasn’t able to overcome in one way or another.
There was a lot that happened in the past year that is worth going over. The first main thing I’d like to mention is that I hit my 2nd full year of blogging, which was really exciting for me. I have nearly 100 blog posts published to date and I really feel like I am just getting started. I began to experiment a lot more with the format and content of the blog and I have found that to be enjoyable. I have also begun to experiment with different techniques to monetize the blog, which has been interesting to me as well. I think that it will be really fun to see what happens with all of the different ways the blog is growing in the coming year. One thing I would like to see more of are some unique perspectives from other sysadmin/IT bloggers because I feel like it will really spark some other areas of growth.
Other high notes of the year include my first trip to Cisco Live! which was a great experience, I learned so much from that conference and it wound up being a great trip. I have taken on more responsibilities in my current position. I have begun implementing some fun interesting techniques and projects as well, including a fully featured testing environment with load balancers, SAN, clustered Hyper-V, SQL, etc. That was been a great tool not only for myself and my own experience learning the technologies but has been a valuable tool for the organization as well to help prototype and test potential technologies. This past year has also been valuable from a networking standpoint, I took part in a full blown wireless upgrade project, I helped with the management and move forward plan with our current switches, and in general learned a ton of new stuff about networking technologies that I did not see myself learning, which has been valuable and fun for me.
While things went well for the most part there is always room for improvement. Areas of improvement for next year include more involvement in automation, for one. I am really getting a good taste now of automation and I think it will be huge for my career growth as well as a benefit to my current employer. I would also like to see myself involved in more (people) networking, whether it be through conferences or other user group gatherings. I think networking with other IT pros is something I need to continue to work on.
Finally, outside of work I have some other stuff I’m working on getting up off the ground that I’d like to mention. First, and most excitingly for me is my side business; I repair mobile devices, iPads, iPhones, Android, etc. The learning experience from that project has been great so far and I would really like to expand some of things I’m doing with it into the next year. Part of getting this up and going will be learning how to develop Android and iOS apps, building a repair tracking system, and learning much more of the nuances that go into running a business that I had no idea about before I started this project. Last but not least, I met my wonderful girlfriend. She has been a true blessing to me so far and I just wanted to get her a shout out while I am writing this up. So to bring things together here, I am really looking forward to all of the rewards and opportunities that go along with hard work and persistence.
There will be more of the same this coming year and I am excited for it. From career goals to personal projects, I would like to see myself continuing to learn, continuing to improve processes and continuing to become a person that can take on responsibilities and people can depend on to get things done. I know it will be hard work and won’t always be fun but I know it will be worth it. Next year should be fun, so until then have a happy new years!
Whether you are new to system administration or have spent some time in the role, getting a grip on documentation can be tricky and often times challenging. I can speak from experience because when I started my career I had no idea how to do this stuff, but slowly over time I have been able to develop some useful techniques. It also helps that I am obsessed with documentation. Therefore the techniques I use are always changing and I am always looking for ways to improve my documentation skills. I think the most important take away from what I have learned, is that there is no end all be all way to do documentation and everybody will probably find slightly different ways. My method may or may not work for you but hopefully you can look at it and use some of the underlying concepts to help with your own style. I have been able to use my own documentation procedures over the past 3 years to really improve my job performance as well as other areas in my job so hopefully there is something in here you can apply to your own situation.
Once you get past the initial stage of how uncomfortable it is to document everything by your mindset to how useful it is to having a living reference for everything on the network, then documentation really becomes much more manageable. The added bonus of solid documentation is that once you have a decent repository built up you don’t have to worry about constantly adding new items to your documentation. I am at a point now that I primarily use my documentation as a reference and don’t find myself having to create or update things nearly as often as I used to. The other main benefit of having solid documentation is to help others on your team, especially junior members so they can go out and learn about certain intricacies or specific details of systems in your environment. It’s also good for avoiding situations like the hit by a bus scenarios. The general idea is that by having a great piece of documentation, somebody can pick up where you left of with minimal downtime and impact. Hence, if you were to get hit by a bus and/or become incapacitated then somebody else could get up to speed with the way things work (what, when, why, how) using your documentation as a reference without having to spend hours and hours of time to figure out what exact information that they needed to know.
Documentation Overview
There are really two main types of internal documentation, internal and external. Public facing (external) documentation is an entirely separate topic and I will not be discussing it here. Network and technical documentation (internal) are the two big ones that I use to reference typically. Network documentation is essentially working with Visio to produce anything and everything related to the network. If you want to be a good system/network administrator a great way to help is to get good at working with Visio. The other type of documentation I like to refer to as “technical documentation” is typically anything and everything that I have found to be helpful in solving a problem. As I mentioned earlier, the longer your work on your environment and building your documentation the less you will have to produce new documentation. This information comes from the documentation section in Limoncelli’s book Time Management for System Administrators which is a fantastic book for sysadmins if you haven’t already taken a look.
My own technical documentation has grown organically in the 3 years, from just a few pieces of information to essentially a living library of all of the different systems I and others on my team work with on a regular basis. Everything I do is in there; from technical procedures, links to external blogs and websites, PDF’s, to pretty much anything else you can imagine that would be useful. One of the hardest things about working on documentation in a collaborative environment is getting people to buy in to the system. The best way I have found to handle this is to take the initiative, start the process and then let everyone know about it what tools you are using and how awesome this documentation is and hope that it sticks. I am not a fan of forcing people to do things but by showing them an amazingly simple system that is also incredibly useful the goal is to get them excited and motivated to use your documentation system. Sometimes it works, sometimes not, but I have found it to be the best approach when attempting to change people’s habits and get them used to working with something new.
In the remainder of this post I will go into some of the details of how I organize my technical documentation and use it to help quickly identify and fix problems quickly. I don’t plan on covering network documentation in this post as it is a slightly different beast.
The Tool
I have used pretty much every documentation system you can think of, from SharePoint, EverNote, Dropbox, various Wiki’s, Office documents, etc. and through my time and experience with all of these various tools I have found one to be the best for syadmin documentation. I really believe that many of these tools serve a certain purpose or function but in my time as a sysadmin I have found OneNote to be the hands down best tools for system administration documentation. As a side note, Wiki’s are a great alternative if you don’t have access to OneNote but my preference lies with OneNote.
OneNote is flexible, you can set up a location on a file share inside your company and allow access by certain AD users or groups to the share to control who can see and write to and collaborate on your documentation system. It is very handy to be able to work on some notes while in a meeting on my laptop then move back to my desktop and have these notes current and in sync between my machines. It is also possible for multiple people to be in OneNote working live on different notes, which is also nice when you are working in a busy team environment. I know there are many other products that allow this so even if you don’t choose OneNote I would highly recommend a tool that offers these features.
Organization
I have OneNote grouped in a specific way to help increase my productivity. I have different notebooks for various items. I have a notebook for my technical documentation, a task log, one for projects and meetings that eventually get merged into my tech docs if they grow and the project/meeting ever materializes into anything more than just a few notes and I also have a notebook for personal work items. The personal notebook contains a few different notes for personal accomplishments, personal agenda and ideas for projects and improvement.
Within the tech docs notebook I have notes for all of the major technologies that I or members of my team work with on a regular basis. Basically, anything that we deem noteworthy gets thrown into one of the categories somewhere inside the tech doc. The structure of this document grows organically for me with a few minor pain points here and there along the way. For example, when a new solution to a problem is found and there isn’t a specific category for the fix, sometimes it is necessary to either create a new category or just use your judgement when determining the best place to store the fix. Luckily the search feature in OneNote works well so if you can’t remember where you put something then you can just search through everything to find it. Coincidentally, the larger your docs grow to be the better the search function works.
Each category has a basic general structure guideline that I have found to improve the workflow and allows things to work more smoothly. The structure applies to every page I can use it on and is a template that includes the most common and hard to find information that I use as a template. The items in each category each get their own note and are as follows:
Network Information – IP’s, DNS names, server and network roles, anything that plany a part in the network goes here.
Support/Contact – Direct software and product support numbers, vendor contacts, important email addresses, account ID’s and service agreements, licenses, contract numbers, etc.
Resources – Any links to relevant and important technical docs, deployment guides, implementation guide or admin docs that are either internally or online.
Commands – I work in a Windows environment so often times PowerShell is the go to resource. I keep a table of all the commands that I deem to be useful here for that particular category.
Useful tools – This one is optional but for some categories is a nice little reference. I use this section to help identify anything and everything that I can use as a tool to help with a particular category.
This information is the skeleton that I begin to model all of the other documentation around. From there, the rest is easy and should essentially fall into place. Most of the time for me, these other items are one off fixes for problems that I have found or have solved. Sometimes a quick link to the blog post that helped will be a good enough reference and other times a painfully detailed set of steps is necessary for documenting the procedure for the fix.
Style
The actual documentation is more of an art form than anything else that gets better with practice. Sometimes technical notes require an obscene amount of detail because of how complex they are and because the procedure only needs to take place once or twice in a year. Other notes just need a rough explanation and therefore don’t need any detail at all, it all depends on the situation. As has been pointed out in the comments section, one good approach to documentation sometimes is to assume the reader has no prior knowledge about the topic and therefore painful explanation and detail are necessary to convey your materials. The point is, there is no cookie cutter way to do all of your technical documentation and various tactics and techniques need to be developed for different types of issues, that is why documentation becomes an art form in my view.
Going back to my own technique, one of the most helpful tricks I have found is to create the commands section, which I throw all of the most useful and common commands into for the particular category I am referencing. The more work you do from the command line, the more useful this note will be to you. For example, being in a Windows environment, I work with Exchange pretty much daily and having a repository of all the useful commands that I need in one place is one of the best ways to save time rather then going through Google looking for the specific information I am looking for every time. Here is a glimpse of what I am talking about.
Another thing that will help your documentation immensely is consistency. I am talking broadly here but when you create a living document you will want to have some sort of consistent style across your documentation. Items that come to mind here are things like having a consistent template as mentioned earlier, consistent naming conventions, fonts, naming conventions, established criteria for creating topics and notes, capitalization, fonts and organization, etc. Having this general style guide established early on will help to make finding and reading information in your documents much easier and will consequently help to save time when you are looking for specific information.
Closing
That’s all I’ve got for now. I just wanted to point out a few things and get people pointed in the right direction that are looking for ideas of how to get going on technical documentation. As I mentioned, there’s more than one way to skin a cat – meaning there are a large number of ways to do documentation and there isn’t necessarily one best way to do things. I have shown you my preferred way, but it may not be the best way for you.
Documentation is as much of a learning process as anything else and sometimes you just need to experiment with things and just spend some time wading around to get the best results. One great way to check if your documentation is working or not is to get somebody from your team to attempt to use your documentation to fix something you have instructions for. If you just want to get some practice writing clear and concise instructions, try this method on yourself. Write out the doc and procedure and come back to the instructions a week or month later and see how hard it is to figure out how to fix the problem. Chances are, if things are unclear or your teammate is unable to fix the issue then it is probably a good idea to take a look at reevaluating how you’re doing your documentation.
If you have any thoughts, suggestions, ideas or anything else just let me know. Like I said earlier, I am obsessed with this kind of stuff and I am always looking for ways to improve my own processes and procedures. I plan on coming back to this post and update it in the future if any of my documentation practices change but for the time being, I hope you find this information useful and applicable to your own documentation processes.