Posted by anton
on Friday, August 22, 2008

this is a bit of a wandering post, but i know i think best through writing things out, and while personal journals are a great thing, i cannot force myself to write them if there is no (even hypothetical) audience.

i think as i get older, i realize that there is so much stuff out there that i am interested in, that the importance of focusing is becoming increasingly apparent.

the distractions are getting more targeted and more fine-grained – it is getting simpler to fill up all the cracks of time between activities – reddit, twitter, google reader – scan the headlines while you are waiting for the build, and boom – you’ve blown your stack and lost the context. this is when discipline often loses to muscle memory; i suppose it is the usual story of combating the addiction. all this technology i surround myself with to be more effective just makes it simpler to waste time without achieving anything.

in this sense (all other things being equal), i find pair programming to be very helpful – it is so much harder to get distracted with someone else sitting next to you.

in certain cases i’ve observed that the proverbial order of magnitude difference in productivity between individual developers can simply be attributed to the ability to focus.

this became even more apparent to me in the past year at work as i have been faced with thousands of stored procedures for a given system – some of these storprocs being 2K+ lines long and recursive(!). talking about a new level of immersion!

one behavior i am guilty of is perfectionism in the face of overarching bigger goals – trying to make something flawless all the while the solution has to be out now and has to be good enough. i think i became immune to rolling out frameworks when a quick point solution is needed, so now the battle has moved to a finer level – testing as risk management, for instance – in the absence of time i test the stuff that is most likely to contain bugs, and i test coarse-grained user-level functionality first instead of polishing up individual unit tests.

but really, all this “micro focusing” business above is not that bad and is quite manageable on day to day basis. what i am trying to figure out though is how it applies to my career in general.

my problem right now is that after a decade in IT i realize that i have some hands-on skills that would always be in demand, and that there always will be plenty of filler work that will keep me busy and provide some sort of satisfaction (the kind similar to mindless exhaustion you feel after a workout).

i know i tend to become absorbed in day to day stuff, and lose the sight of everything else. NYC is dangerous in this respect – the pace and the energy make you work harder, and one can get fixated on something with a lot more intensity. this is when i find myself performing all sorts of yak shaving feats; is it really what i should be spending my time on?

i think paul graham got it right in his essayNYC has the drive and the ambition, and i feed on it, but i also need to be fully cognizant of its true target. doing something pointless twice as hard isn’t something i am after.

so what is it that i should be doing? so let’s see if i can talk through this.

i always took pride in knowing a great deal about a lot of technical things all the while aspiring to grasp “the bigger picture.” i enjoy being able to build things, drive them to completion, and deliver. i also know that i like dealing with people, solve organizational problems, motivate and build teams.

i really enjoy doing hands-on stuff, and i am pretty good at it; at the same time i’ve seen all too often that most of the technology problems stem from people problems. it pains me to be on the receiving end of business blunders that render my technical efforts useless.

one of the trends in large companies is increasing specialization on many levels of IT. it is inevitable to a degree, but this is precisely where my skills would be least utilized. the image that haunts me is the nine to five drone with atrophied knowledge of everything but the immediate responsibilities of everyday job, unable to survive outside of the large corporation. there are plenty of slots like that – just waiting to be filled.

i want to work in the environment where people around me do have a vision that we all share, and this is what drives our everyday work.

i also like small teams (or small companies) – you get to do a lot of different stuff, you learn much faster, and you feel the impact you make.

so ideally it comes down to focusing on my strengths and consciously building upon them, which means spending less time on everything else.

it sounds quite absolute and final (an also quite fluffy), so perhaps a better approach is to set a goal, timebox it, and focus. if it works – great, and if not – review and start again.

  • current work: spend less time on it; spend less time on filler work; focus on business – actually read the pile of books i have here instead of reading up on tech stuff.
  • spend more time on hobby projects, get back into languages/platforms i abandoned, pick a few projects and actually contribute; build the brand – push for talks at user groups, use real name in forums, blog more on technical topics.

as far as career choices go:

  • i’ve done the enterprise architecture thing for a couple of years before, and despite the raging pundits that the title has accumulated, i think there are great things to be done. you do not have to abandon the technical skills, but you have to realize that your success does not depend on tech anymore. you do end up building and running systems in this role, but they also include people, culture, and organization – not just technology. there is a lot to be said about systems thinking, and there is plenty more reading i need to do. i am also yet to find a good no-bullshit community that thinks along these lines (so far i’ve been really enjoying Stu Charlton’s blog for instance) and people i can work with and learn from…
  • ...which leads me to consulting. what appeals to me here is focus on solving a particular problem (compare that to a less focused role of a regular employee), as well as a great variety of problems, and generally a higher level of expertise expected. you grow and learn so much faster, and ideally this might lead to a product idea, if you see the same problem repeated over and over again. one skill that i know i have is what jerry weinberg calls “jiggling” (see Secrets of Consulting and Are Your Lights On?) – helping people get “unstuck” by asking questions, suggesting tools, practices. often i realize that in many teams although i could do all the work myself, the team would get so much more out of me if i create an environment where people can learn and grow on their own.
  • another option is a product/program owner in a larger company. the biggest selling point is the diverse set of skills required and the sense of ownership. you have a bigger picture, you are responsible for it, and at the same time you need tech, people, and organization to be a success.
  • the refinement of the above is a startup – you build and deliver a product. your impact is tangible, you actually “own” something, and you contribute on many levels, which is a great use for a broad set of skills.
  • and the last option is to get a foot in the door in a larger company as a regular developer (since this is an easy lowest common denominator that is versatile enough and faceless enough) and then try and grow into some sort of a role similar to one of the above. it is terribly inefficient though – most of the energy will be spent on the wrong things.

it does help to write all of this out – having a stake in the ground is a start. let’s see how it goes from here.

code complete

Posted by anton
on Friday, June 22, 2007

here's daily wtf-worthy quote related to me by a co-worker.

some background: we've been helping these guys move their stuff to our new source control.

us: all your stuff is set, check and make sure it's ok, then we'll move it to the main repository
them: we'll let you know when we deploy it to production
us: we don't care when you deploy it. all we need from you is to verify that your stuff looks ok in the test repository, then we will move it to the main one
them: it's ok, it will go away in just a couple of months
us: oh, so you mean it is a test throwaway prototype project?
them: no, it will go into production in two months, so no one will be using a source control repository after that
us: ...

why wiki, continued

Posted by anton
on Sunday, December 17, 2006

our team has been running on trac for past four months, and the results so far were very encouraging. we organize things under coarse-grained categories, and then use tags to organize content further. tags really help out a lot, i got so used to CLI-like searching (/trac/tags/tag1+tag2), and their indexing capability (ListTagged() macro).

a few things learned:

  • wikis work best for small homogeneous groups, and even then only a few "expert" people contribute; sadly it is not the whole group that enthusiastically uses the wiki as a group's collective knowledge base, as well as communication device (perhaps it is a nature of our environment though)
  • it works really well as a metadata "glue", when it pulls together different sources in one context (a few links to documents in sharepoint, a few links to some internal systems, and some text to describe it all). i would really like to extend this further and start consuming stuff from other apps (syndicate feeds, pull in reports, etc. for instance - every morning create an entry for past night's batch run issues from the report we currently have, so that person on call can start annotating it as issues are worked on)
  • i really need an auto-save feature (gmail and the like). since i am trigger-happy on the keyboard, i've lost posts a number of times. it should be trivial to implement. on a side note, i thought i would hate the new spelling support in firefox, but i find it incredibly beneficial
  • tags are great, but the consistency of tag corpus is an issue; self-imposed rules help a bit (nouns, no plurals, lowercase, etc), but a drop-down of suggestions as you type would be very helpful
  • i haven't really needed to search through attachments yet using trac, but then we still store most of our binary docs in sharepoint. the funny thing is that people save bigass ms office documents in sharepoint with revision tracking turned on (40M documents are not uncommon), which forced sharepoint admins to turn off versioning across the board, defeating one of the main benefits of sharepoint (apparently our version did not use binary diffs, saving full content every time). on top of that search within documents in our version of sharepoint is pretty much useless anyway. so considering all this i am thinking of just asking people to map a branch of our svn repo as a drive and save documents there; although it might result in a lot of commits, it would be versioned and in addition mapped into our website's namespace
  • need for templates - as we start to store more structured content like technical specifications or high-level interface descriptions that have certain required fields
  • and the final wish, or more of a pipedream - smarter markup that has semantic value that could be harvested/searched/aggregated (something along the lines of a yet-to-be-realized promise of xml-based backend of ms office) with support for intellisense-like autocompletion. as mentioned above, as we start storing interface descriptions that have certain common fields (source system, target system, integration technology, group that owns it, canonical data format used, etc), i want to be able to run queries like "show me all interfaces owned by this group", or "show me all interfaces that use this integration technology", or "show me all interfaces that feed this system". then i want to save these queries and make them dynamic, so essentially they become different views into the data. sharepoint currently supports it with excel-like functionality and views, but the content is strictly tabular. what i want is the ability to use one of these domain-specific markup microformats as i am writing my wiki entry. i can hackily mimic this to an extent with "typed" tags (i.e. interface/source/systema, interface/technology/toolb), but it just feels way too flimsy. jon udell's continuous laments on this subject were very inspiring.

when do you think?

Posted by anton
on Sunday, December 10, 2006

i think it was rutherford that upon noticing that one of his students spent all his time at the laboratory experimenting, exclaimed, "but when do you think?"

work feels like a rat race these days, and i almost have no time to catch up with blogosphere, let alone spend some time playing with things that are interesting and somewhat unrelated (interestingly most of the stuff that i am proud of at work, the stuff that is actually cool, i did as a skunkwork project in my spare time).

i am glad to report though, that i finally found a way to listen to podcasts. ideally it would be during commute or walks at lunch time, but since the city is small and walking around suburban expanse of parking lot is anything but inspiring, i had to come up with something else. it turns out that podcasts work wonders at the gym.

my problem is that these days i get too easily distracted, so confining myself to the tedium of a workout is the best way to focus. it used to be like that before, where i could think through designs or really listen to music, but i never made the leap to podcasts (or audiobooks) until past few months.

i need this time alone, this almost meditation-like state where it is just me and one subject/object that i am dealing with. this is the time when i get ideas, when i am creative. as long as i complement this with regular feedback from others, this is a perfect combination. speaking of feedback from others - it is best to get the team to eat together; it is amazing how well it works not just for bouncing ideas off each other, but for the overall health of the group.

at home achieving this state of concentration is often difficult, since at the same time there are too many distractions, and not enough difference to be inspiring. it turns out that these moment of solitude are most productive when offset by the din of the coffee shop, or even a bar - this way any distraction is short-lived.

at work not having an office, or even a cubicle until recently results in constant context-switching (or even thrashing, when operation duties of looking after others' code clash with any design/building). so i am trying to minimize distractions as much as i can, maximizing the time "in the flow"; it starts with simple things - on my machine all the interfaces are as ambient as possible - no popus, no sounds; but most often i work from home if i want to get anything done.

but back to podcasts - so far i have been catching up with jon udell and itconversations. jon's stuff is always a pleasure - sometimes i rewind and replay just to get everything, sometimes i pause and think - even if the topic itself is not that interesting, or the interviewee is not particularly impressive, jon always finds a way to trigger a thought, providing this inspiring jolt of ideas and connections.

i tried a few channel9 podcasts, but they were sickeningly patronizing and so bland and boring that i switch off in just a few minutes (i cringe easily so any kind of off-color jovial behavior rubs me the wrong way; i can barely take the elevator music and soothing radio-voice introductions of itconversations as it is). now that jon is joining channel9 at microsoft, i am looking forward to their improvement.

now i just need to broaden my search and see if there are any other podcasts worthy of interest (and i guess they do not have to be it-specific, as long as they are spoken word).

solaris 8 threading

Posted by anton
on Sunday, August 06, 2006

another quick joyous encounter: one of the co-workers was half-heartedly beating his head for a month against a heavily-threaded java-based app from a third-party vendor. the app ran on solaris sparc 8 and with 4-way box it drove the sysload above 100 (!), while cpu utilization would remain below 20% and prstat showed more than a thousand threads. in a passing i asked him if he tried alternative thread library (another reference) - i have always used it for our java app servers on solaris 8, but never saw any notable improvement, since there would be less than a hundred threads per JVM. in this case, however, the library solved the problem - the system load instantly dropped down to 1-2.

initially i liked M-to-M solaris 8 thread library, since its complexity was quite sexiful to anyone studying it theoretically, but apparently a simpler threading model is much more effective in the long run from many perspectives, and this is why it became the default in solaris 9.

serendipitous apache tinkering

Posted by anton
on Sunday, August 06, 2006

this is something i accomplished at work in the past month that was sort of peripheral to my "main" job. it brought this much needed sense of accomplishment in the midst of fighting fires and dealing with incompetence. for once i had all the people i needed close by and i had everything i needed to get the work done.

the whole thing was merely replacing a cisco reverse proxy/ssl termination device with an apache server. i was briefly involved in the original solution, steering them in the right direction (sadly, pointing a cisco consultant at their own docs to prove that they did indeed have reverse proxy and url rewriting functionality). however this time around, when i got involved, it turned out that the cisco device was not able to handle the traffic altogether due to the firmware issues, so something needed to be done in a day or two.

it was so gratifying to be able to run the whole thing to the completion, working through firewalls/certs/nat'ting, compiling/testing and rolling this stuff out in a matter of several hours, complete with some quickly whipped-up load testing and monitoring. granted, it was just a dozen internet-facing proxying sites, something i have done so many times before, but showing the skeelz off, especially since it was not even my job, technically, and doing it all in a few hours with all of these folks watching, was a nice uplifting experience after long nights of frustration beforehand.

the sad thing is that all the folks that were working on this stuff for past three months had very little understanding of underlying technology (and that's, of course, even worse that no understanding at all). all of it was integration of packages into a portal and serving it via SSL to the end user, but all they had were consultants for each of the packages that knew only the terminology and high-level details of how their stuff worked. so what i witnessed that night was a picture that i've seen every single day on this project - a constantly growing school of fish darting back and forth; as it grows in size, the movement is becoming increasingly erratic. the primary reasons are: too many people involved, too little people actually understanding what is going on.

but the technical reason i mention this is the fact that although apache 2.2.2 has rewritten their proxying stuff and made it much better, it has some bizarre problems with handling connectivity with the backend server (most likely IIS-specific) that results in the remote clients getting a 502 proxy error and the following line showing up in the error logs:

proxy: error reading status line from remote server (null)

there are a couple of bugs filed on the apache bugzilla, but nothing confirmed yet:

since my stuff was compiled with worker mpm, the easiest workaround was to use SetEnv proxy-nokeepalive 1. other potential workarounds mentioned in the bugreports are:

  • use a prefork process model as opposed to worker
  • downgrade to apache-2.0

what happens is as follows: traffic flows for a while and there are no problems, then traffic stops for 10 minutes, then the first few requests to hit those stale connections to the backend server get the 502 error, without even hitting the backend server. there is nothing in between that kills these connections, and it is not always reproducible. since i was under time constraints, i just let it be after applying the workaround.

another thing to keep in mind that always confuses me with the apache reverse proxy docs: given a frontend server, and a backend server, this is how the rules should look like:

ProxyPass /path http://backendserver:port/path
ProxyPassReverse /path http://backendserver:port/path

in other words, both ProxyPass and ProxyPassReverse directives have to refer to the same server, otherwise the reverse proxy rewriting just would not work.

spam and butterflies

Posted by anton
on Tuesday, August 01, 2006

So here I am, taking a break from updating my resume. I must say I do feel a subtle streak of vengeance; even though fully acknowledging the childish nature of it.

I think past few months proved to be a good experience; they showed me what happens if there was nothing but work in my life. Not only my world condenses and becomes a tunnel, but even the work itself starts to suffer as I dutifully plug away without ability to step back, look around and get that much needed "blow your mind" experience that ultimately makes me better at my daytime job.

I stopped reading, I stopped actually listening to music, I spent less time on film, on my friends, even on just forgetting the work for a day. The last drop was dreaming about work in those few hours between the urgent phone calls.

Work is not my life, it is something I like doing, it also happens to be my hobby, but it can only co-exist with all the other stuff I am into. I do tend to go into these intensely focused streaks with all my hobbies, but they last for a few weeks, and then I switch.

Working 12-14 hour days without holidays or days off for past two months got me burned out. Occasional sprints at the end of the release are perfectly normal, but they cannot last for more than a week or two.

I am also done with being on-call. I spent 6 years carrying a pager; someone has to do it, but I value my free time too much to get into it again (especially since we are not paid overtime, nor we are paid extra for being on call).

Work seems to be calming down, but the problem is that the most I can expect at the end is a ~1K bonus - all the sacrifices will be forgotten. I have three weeks of vacation left and probably another two weeks of comp time accumulated in past two months, but I know I will be lucky even if I get to take my full vacation (and only one day gets carried over to the next year). This particular situation is not the first time it happened to me at this company. The higher-ups forget too fast and move on, while their people at best get a humiliating trinket.

There is no carrot dangling in front of me in the form of a promotion or a big bonus; no matter how little I think about pop behaviorism that drives popular incentive programs, no matter how much I value my peers' opinion and personal satisfaction, I also want to see recognition for my work and see myself grow.

Another problem is that a lot of the work lately has been firefighting. As any big company knows, the work distribution is 80/20, and we are part of that 20 percent that gets stuff done. We found ourselves in the middle of a shitstorm caused by a big-bang deployment, as it is transitioning from consultants to employees and stabilizes.

There are a lot of things I have learned and learning every day, and it is a big project with a lot of complex constantly moving parts.

However, I find that most of my time is spent managing the communication explosion that is the result of several hundred people working in a large organization burdened with compliance requirements among other heavyweight bureaucracy (just ask me about our laptops). How can I work on anything when I get 300+ emails a day?!

Paul Graham yet again phrases these obvious things very nicely in "Power of the Marginal" while talking about anti-tests:

Where the method of selecting the elite is thoroughly corrupt, most of the good people will be outsiders. [...] If it's corrupt enough, a test becomes an anti-test, filtering out the people it should select by making them to do things only the wrong people would do. [...] For example, rising up through the hierarchy of the average big company demands an attention to politics few thoughtful people could spare.
[...] People at big companies don't realize the extent to which they live in an environment that is one large, ongoing test for the wrong qualities.

It is getting better, and I am getting better at it, and there are nuggets of value in this, but the question is whether I am willing to spend my time and energy on defeating these tidal waves of crap in order to get my work done and gain knowledge.

If I were to stay I would have to play the system in order to advance. No matter how much you help your peers or their direct management across the enterprise, my next title depends on the visibility to the higher-ups, all of those that sit on the promotion board. This means I need to pick something very visible, focus on it, and dazzle them with reporting skills, generating as much noise as possible. Looking around, very few of the folks at this level deserve the title at all (but those that do are exceptional, and I am so glad I have them around, since I can look up to them).

For the first time in quite some time I really do like and respect my teammates and my manager; I think we have a fantastic team with a lot of potential, and the future in half a year or a year looks pretty nice as we are stabilizing the environments, gaining first-hand support and implementation knowledge, positioning the team to be the integration/best practices nerve center that possesses overall understanding of data/systems, their problems/shortcomings, overall design, and, most importantly, the actual knowledge of the way the business works.

What I am afraid of is "boiling the frog" mode, the perpetual dangling carrot of extra bonus, another small interesting project, yet another short-term treat. This instant gratification masks the opportunity costs of not leaving, and these costs are growing every day.

I value loyalty, I like the people I work with, and I know I will be letting them down If I leave, but in the end I do not want to count on company's loyalty when they make business decisions. I have no illusions, and I'd rather be a professional in a slightly different sense that pays less attention to emotional attachments and focuses on more pragmatic things. I think I can do better given my current work environment, my pay, and work hours, compared to other companies.

I am also a little leery of using blackmail tactics to get what I need (threatening to quit or bringing an offer from elsewhere without an intent to accept it). Unfortunately, this seems the only other way to advance in this company without "playing the system".

The time is right. I feel like I need to move on, and changing jobs is more of an excuse to try and change everything else (and this is what it should be, really - a hobby that also pays for the means to do other things). Now it is time to refresh some of the knowledge in preparation for the (anti) tests that most of the interviewers subject people to :)

hall of shame

Posted by anton
on Tuesday, July 04, 2006

how do you know that an IT department has failed? when the users, after repeated requests to help them out with building a small custom content management system, turn around, get a server at ev1 servers, and build their app there.

now just stop and think about that for a second. this is just insane! i felt ashamed (of my department, my profession, my title) when i heard about it (especially since my title does have the words "architect" and "enterprise" in it). business users wielding developer tools, trying to replace email chains with spreadsheet attachments, and an IT department that is so bent on "enterprise" and "no more custom development, all packaged products!", that it fails to see a direct immediate need that could be easily filled with just a few weeks of quick hacking in something like coldfusion (or even java, or less "enterprise-y" php/rails for that matter).

granted, if each department goes off and builds their own silos with custom apps, this would be a disaster (ms access app that lives on a shared drive), and the other extreme is true - packages for everything, no more custom development; all or nothing - big bang enterprise solution or email and spreadsheets.

now without knowing all the details, the ideal scenario would have been for the enterprise integration architecture dudes to built a universal standard layer to access enterprise data, and then let the departmental teams go nuts with their own stuff, as long as they conform to a loose set of guidelines on architecture for their apps - supported platforms, some development standards, hands-on enterprise architect on a project, etc. a lot of this department-level stuff should be developed in rapid prototyping language - something scripting, something that is web-enabled, and something that can get things solved fast. the danger is a quick sprawl of spaghetti, and this is where good internal dev teams are important - mentoring, common code ownership, etc. i have seen over and over again how quick rapid app thrown in gets the biggest bang for the effort spent, so we just need to make sure we get the core backend right, and then build systems smarter.

in the interim, perhaps they could have looked at a wiki like confluence, or even at sharepoint+infopath combo that is sadly grossly misused and abused here, but has so much potential, no matter how much i hate standalone sharepoint (probably for all the wasted potential).

we used a lot of cold fusion back in the day, and now the swing is into the Java world and people stopped developing the apps as much as they used to, because the barrier for entry is so high with java. some of it was the backlash against poor developers writing unmanageable apps in cold fusion, but the benefit was an ability to build things fast to help the users. we need to bring this back, but be smarter about integration points with enterprise data. those should be architected/engineered properly, but smaller departmental apps should be built on top of them using glue languages and lighter technologies that lend themselves well to continuous evolution (because, as we know it, the application is never "done"; it is finished only when users stop using it).

i think this is why i am so sensitive to the "architecture astronaut" syndrome; we need to be able to see the big picture, but focus on the end users, "empower" and "enlighten" the developer "masses" that are closer to the business, help them build faster, smarter apps that get the work done. i know i lack a lot of knowledge in the custom app space for this industry, and a lot of the problems are already solved by these large packages, but there will always be the need for something smaller, quicker, more agile built on top of these large enterprise apps that would greatly benefit small groups of users.

list of books

Posted by anton
on Friday, June 09, 2006
Since our team at work has just been formed, we were asked to submit a few things that we should get, one of them being a list of books. The team does application/integration architecture and implementation. Below is the list I came up with in half an hour, escaping work on Friday night. A lot of these are available on Safari, but since most of these books are technology-agnostic (i.e. not reference texts), they age well, and therefore should reside on a bookshelf.
Must read/must have:
- Enterprise Integration Patterns : Designing, Building, and Deploying Messaging Solutions (0321200683)
- Patterns of Enterprise Application Architecture (0321127420)
- Peopleware : Productive Projects and Teams, 2nd Ed. (0932633439)
- The Best Software Writing I: Selected and Introduced by Joel Spolsky (1590595009)
- Joel on Software: And on Diverse and Occasionally Related Matters That Will Prove of Interest to Software Developers, Designers, and Managers, and to Those Who, Whether by Good Fortune or Ill Luck, Work with Them in Some Capacity (1590593898)
- Refactoring Databases : Evolutionary Database Design (0321293533)
- Working Effectively With Legacy Code (0131177052)
- Service-oriented Architecture : Concepts, Technology, And Design (0131858580)
- Enterprise SOA : Service-Oriented Architecture Best Practices (0131465759)
- Enterprise Service Bus (0596006756)
- The Pragmatic Programmer : From Journeyman to Master (020161622X)
- Refactoring : Improving the Design of Existing Code (0201485672)
- Head First Design Patterns (0596007124)
- The Mythical Man-Month: Essays on Software Engineering (0201835959)
- Design Patterns: Elements of Reusable Object-Oriented Software (0201633612)
- Rapid Development (1556159005)
- Hackers and Painters: Big Ideas from the Computer Age (0596006624)
- Service-Oriented Architecture : A Field Guide to Integrating XML and Web Services (0131428985)
- Applied Cryptography (0471128457)

Very good/really should own:
- Agile Software Development (0201699699)
- Extreme Programming Explained : Embrace Change (0321278658)
- Practices of an Agile Developer : Working in the Real World (097451408X)
- Agile and Iterative Development: A Manager's Guide (0131111558)
- The Inmates Are Running the Asylum : Why High Tech Products Drive Us Crazy and How to Restore the Sanity (0672326140)
- Behind Closed Doors. Secrets of Great Management (0976694026)
- Ship it! A Practical Guide to Successful Software Projects (0974514047)
- The Art of Project Management (0596007868)
- The Timeless Way of Building (0195024028)

- Thinking In Java (0131872486)
- Planning Extreme Programming (0201710919)
- Test-Driven Development : By Example (0321146530)
- Why Business People Speak Like Idiots : A Bullfighter's Guide (0743269098)
- Effective Java Programming Language Guide (0201310058)
- Domain-Driven Design : Tackling Complexity in the Heart of Software (0321125215)
- The Psychology of Computer Programming (0932633420)
- John von Neumann and the Origins of Modern Computing (0262011212)
- The Art of Software Testing, Second Edition (0471469122)
- Punished By Rewards: The Trouble with Gold Stars, Incentive Plans, A's, Praise, and Other Bribes (0618001816)
- The Cluetrain Manifesto: The End of Business as Usual (0738204315)
- Data Crunching. Solve Everyday Problems using Java, Python, and more. (0974514071)
- The Algorithm Design Manual (0387948600) 
Probably there are a few that I am missing, especially in the non-tech department. Some of these are also listed more for the culture shock value, to get people thinking. Also, these are not developers' books per se, considering that folks should have a developer background and the nature of the group's work.

biling the night away

Posted by anton
on Sunday, February 19, 2006
working operations issues on sunday night is never much fun. especially when you are talking to a certified oracle admin/dba/etc at work, and you tell him "i am trying to telnet to the port the database is listening on and nothing responds", and he keeps telling you that one cannot telnet to that box. then he insists that the only way to connect to the port is using oracle client. and then i notice that the guy's phone work number ends with 1337. oh the irony!

negative inspiration

Posted by anton
on Friday, October 07, 2005

this is an unfortunate quality of mine that I have noticed a while ago.

there is a number of pet projects that I always have around (conveniently summarized in the wiki) and complete on a loose timeline parallel to my direct work.

there is a person on the team that is a classic example of "hit and run" behavior - for a brief period of time he generates an insane amount of activity, climbs all the ladders, litters all mailboxes, calls meetings. then he loses interest, gets distracted, starts another project. this approach is also often called a "seagull syndrome" - fly in, crap all over the place, and fly out. he never completes anything fully, even his direct daily work, leaving things in half-assed state, which has earned him a well-deserved disrespect of his peers.

this person is also bent on climbing the political ladder, pissing off every single one of his teammates in the process. this has an effect of essentially making them sabotage any of his ideas, even if they are sound.

I strongly believe in joel's mantra of hiring people that are smart and get things done. it would make a great example if I could describe this guy as someone that is smart, but never gets things done, except that the former is not true at all.

whenever he turns to any of my pet tasks, I am forced to act, I scramble, motivated to get it done, because I do not want it to be ruined by his midas touch. it happened a number of times already, and made me pull together a few successful projects.

it is not that i never work on these projects by myself, but the danger of his intervention becomes an incentive.

ideally, one should be able to harness his energy and work together with him, but I simply cannot stand the sloppiness and his constant desire to rise above, and lead the way - "manage" - not together with people, but above them.

I am willing to give him a benefit of a doubt and attribute his managerial maneuvering behind our backs to simply a lack of understanding how to succeed in his ultimate goal of becoming a manager ("never ascribe to malice, that which can be explained by incompetence").

of course, this is a very selfish motivation - it is disheartening to see him trying to hijack a project I wanted to complete myself. I want to get it done properly, see it being used and take credit for the effort. I fully realize this and view this competition as unhealthy, even though it does result in a completed project.

I think it comes down to being open and trusting - with other people in similar situations I am able to surrender this possessiveness and try to carve out pieces we can individually work on. with him it is impossible, since one always fears that he would do things incorrectly, as well as try to suck the life out of the project by trying to "lead" it.