As a programmer, we tend to take sysadmins for granted. The few times I've been without a good sysadmin have really made me appreciate what you guys do. When we're venturing into an environment without a sysadmin, what words of wisdom can you offer us?
|
locked by Mark Henderson♦ Jan 9 '12 at 6:50
This question exists because it has historical significance, but it is not considered a good, on-topic question for this site, so please do not use it as evidence that you can ask similar questions here. This question and its answers are frozen and cannot be changed. More info: FAQ.
|
I'd start with:
|
|||||||||||||||||||||
|
|
<insert big post disclaimer here> Some of these have been said before, but it's worth repeating. Documentation:
Automation:
Monitoring:
Security:
Hardware:
(Aside: There are two ways to fix a problem at 3am, one involves being warm, working on a laptop over a VPN in your pyjamas, the other involves a thick jacket and a drive to the datacenter/office. I know which one I prefer.) Project management:
Servers have a defined lifetime when they are suitable for use in production. The end of this lifetime is usually defined as whenever the vendor starts to charge more in annual maintenance than it would cost to refresh the kit, or around three years, whichever is shorter. After this time, they're great for development / test environments, but you should not rely on them to run the business. Revisiting the environment at 2 1/2 years gives you plenty of time to jump through the necessary management and finance hoops for new kit to be ordered and to implement a smooth migration before you send the old kit to the big vendor in the sky. Development:
Backups
And most importantly... Pick your failure modes, or Murphy will... and Murphy doesn't work on your schedule. Design for failure, document each system's designed weak points, what triggers them and how to recover. It'll make all the difference when something does go wrong. |
|||||||||
|
|
Don't assume its easy. I know many programmers who think that just because they can setup IIS or Apache on there dev box that they can run a web farm. Understand what the job involves and do your research and planning, don't just think the sysadmin work is the easy thing you can do in 10 minutes to get your app deployed. |
|||||||||||||||
|
|
|||||||||||
|
|
Security is not an afterthought. While a hacked app can make the programmer look incompetent, it's (at least) a lost weekend spent verifying, cleaning, and/or restoring from backups for a sysadmin. For that matter, don't treat backups as version control. They're for disaster recovery, and are not really designed to restore your code because you forgot what you changed. And stop blindly blaming Windows Updates for your code being broken. I don't care that it worked beforte, tell me why it doesn't work now - then we can see whose fault it is. |
||||
|
|
|
How to debug networking issues and watch your program run with sysadmin tools. As a programmer who got started in system administration, I'm amazed by how impotent many programmers become once networking "just stops."
|
|||||||||
|
|
Know how to troubleshoot problems. It's very easy to pass the buck (e.g., your network is hosing my communication with the database). It may be the network's fault, but you should have application logs with errors that, using Google or SO, may reveal a problem in an app's configuration. Everyone likes to blame the hardware, OS, or network, so if you practice a little more due diligence, you'll make the sysadmin a happy person. Because, if nothing else, you might be able to point them in a specific direction as to what might be wrong (as opposed to saying "your network sucks" or something equally helpful). |
|||||
|
|
Document everything you can. Cannot tell you how many times the last sysadmin thought it would be cute not to document something for 'job security' or someone just wanted to get in and get out. Just like a programmer should leave good comments, sysadmins should document. A diagram of the topology would be nice too. |
||||
|
|
|
Plan B. Always have a disaster recovery plan in mind when designing and developing a solution. Recognize single points of failure that can lead to an outage. |
||||
|
|
|
Documentation: no need to go nuts, but how the application works, a diagram showing how the bits fit and ways to test each component when it all goes wrong. Sample data and output is nice. Requirements: what modules does it rely on? Versions? OS? Monitoring: ideally developers would include monitoring information and tests with the application. Speaking of packaging, PACKAGING! Nothing worse than a "deployment" which means checking out a new revision of a file from VCS and copying it to a bunch of servers. Too often programmers don't appreciate the complexity of deploying software: there are reasons why versioned, packaged software forms the backbone of most OSes. If a developer came to me with an RPM which installed first time with concise, comprehensive documentation and some Nagios tests they'd be my new best friend. |
||||
|
|
|
I'm surprised that non of the 17 answers give here so far include anything about ensuring your application runs when logged on as a standard user. Other than the installation process, the application should run fine when logged on with a standard user account. |
||||
|
|
|
This may apply only to beginning programmers, but I deal with a few things on every project with some programmers.
These may seem simple, but I deal with it constantly. Brian |
||||
|
|
|
||||
|
|
|
OK this is slightly ranting but: a) When coding, assume that underlying infrastructure could fail, and does not come from happy-happy always-on land. Or Google. b) We probably don't have the resources to implement anything like the infrastructure you've read about, so take it easy on us when things go down. It's likely we know what needs to be done, but for whatever reason it just hasn't happened yet. We are your partners! c) Like jhs said above, it would really help if you had a passing familiarity with tools to troubleshoot the infrastructure, such as ping, traceroute (or combining both - mtr), dig, etc. Massive bonus points for even knowing about Wireshark. d) If you program a computer, you really should know how it connects to the network and the basics like being able to parse the output of ipconfig /all or ifconfig. You should be able to get your internet connection up and running with minimal help. Otherwise I think Avery pretty much nailed it. Devs who do a little sysadmin are worth their weight in gold! But equally, sysadmins who understand how devs go about things (including versioning, etc.) are pretty much essential in this day and age. This seems to be in the air at the moment, I've noticed more discussion about the dev/ops relationship in blogs - check out |
||||
|
|
|
That no one group or function is 'better' than another and that none require 'bigger brains' than each other either. I've seen both sides get all prima-dona'ish in the other's company - you're all trying to achieve the same goals - focus on these similarities and not the fact that you use different tools. |
||||
|
|
|
Infrastructure architect turned programmer, might want to roll back that transaction in the future though :)
|
||||
|
|
|
As someone that has been a sys admin for developers, and a developer myself, the advice given here is not only gold, but should be part of the hiring documentation for new developers for companies all over. Something that I haven't' seen (yet) explained is that developers really should know the products that they'll use to create the programs that they are paid for. The amount of times that I've had to explain and configure apache servers, eclipse and Visual Studio installs, and database on developer machines is a bit worrisome. |
||||
|
|