Thursday, December 20, 2007

One Year Sans Development

It's been one year since I quit being a developer to become something that more closely resembles a cross between help desk for content folk and project managers and a product trainer. I think my job now comes closest to looking like the guy the sales person hauls along to do all the technical presentation bits and question answering, but without the sales person, as I'm catering to internal products. It's a lot more interesting and difficult than it sounds, and it took about a year to really ramp up and be able to streamline work for the products I work with so that there are few hitches when they're trying to get a product to market.

I was thinking about my career history from the last year today, because today I had a course in HR for Management which was a hold over from my time as a SOX-compliant-with-direct-reports lead, and because today I wrote (and delivered) an email to several of my superiors explaining why I didn't want a position that was available for which I am a perfect fit (and they know I'm a perfect fit). That email was the direct result of my job quest a year before when I was told by a superior (a much higher superior) that I wasn't considered good promotion material because I hadn't applied for a particular job that would have been a promotion and for which I was well-suited. I pointed out that I knew that job had already been tagged as one that absolutely would not be given to someone within the department, and that I'd applied for, and made it into interviews (of which only two were given and I made a good impression), for a similar position in another department. The response was that I should have applied anyway so that my desire for advancement and enthusiasm for my work were evident and that they didn't know about the other application. Which was an eye-opener. I assumed my drive and ambitions were obvious, given the 60 and 80 hour weeks I had invested in my previous project as a tech and team lead and my roles on my current project filling both tech and team lead with seven direct reports, until a new tech lead could be groomed. And thus, my first deep dive into company politics was incredibly painful. Extremely painful given that another position I was excited about turned out to be working with my current group. I literally left the office of the person I talked to [you might know who you are - you and I have talked since then, and you might remember how you pseudo-interviewed me, and then I just never came back], walked downstairs to get code samples because I was excited about what was going to be developed, only to be intercepted by my manager, who was also excited - about the new project we'd be working with - that project. Within a week, I was running reports against our systems to determine integration points between the systems and product viability. F00k! (I'm going to claim that's the opposite of W00t!). That left two other options, and one of those took me through four interviews for a team lead until they rehired the person who had left and whose job I was after. The person who had left just wanted a telecommuting clause. You can't compete with that. They obviously know the job better than you do.

That's not to say I settled on my current job. I picked it out of many that were available. It's just that those other jobs I didn't apply for weren't options at all as far as I was concerned for various reasons. Although since then, I've met some of the people I was avoiding because of whom they associated with, and we've become friends and productive coworkers. That's good - it makes me feel better about why I left my old position.

So, I popped back in my notes to see what it was I was concerned about and working on a year ago when I left my old job and was immersed with being a developer. Specifically, a .NET developer on an e-learning platform. I'm fascinated with what mattered to me a year ago that currently plays no part at all in my day-to-day job. I'm not sure what I'd be dealing with now if I was still there, but I don't think it would be significantly different, except for playing around with Silverlight, Ruby and Python, which I do now for fun instead of for profit. So here you go - the 70% to-do list of an ex-.NET developer (I had a lot of other things not on this list that related to being a team lead and to day-to-day coding/storyboard considerations):
  • LINQ - any use to us?
  • BOINC/Peer2Peer - BOINC examined for some reporting tools. P2P prototype designed for the web farm to make file delivery more efficient as files are replicated across many servers rather than a single file server or NAS [1 year later note: just joked to Mean Mr. Mustard about BOINC today - played around with Silverlight and Visual Studio 2008 and a Ruby tutorial that all make P2P much easier].
  • Large XML document rendering and disposal. Look at document-to-XML translation and rendering issues (talked to parent corporation - they have an expert [eventually missed his Twin Cities presentation while tooling up for new position]).
  • Custom search engine owned by another internal group - integration with our product. Watching for integration possibilities [they eventually contacted us rather than us contacting them - see previous note tagged with F00k!].
  • Provider model for all base level objects to disconnect from proprietary database coupling in anticipation of new database or coding language if necessary - prototypes complete with unit tests and NANT builds. Prototype eliminated several levels of C and VB code and was a magnitude faster in unit tests.
  • .NET 3.0 - looking at XAML and Workflow (declarative languages) vs. current code-behind model and how to integrate new technologies into a problematic registration system that could be simplified with a rules engine.
  • Rules engine - rolling our own - some prototyping done based on books, Biztalk, existing rules engines research with other business units/subsidiaries.
  • A workflow for registration (transactional + compensations) - some prototyping done using Biztalk 2004. Seriously complicated - links to numerous external systems and undo (compensation) logic for those systems.
  • Redesign of the permission system for a finer granularity and inclusion/exclusion modeling - viable model created [postscript - which ended up looking almost exactly like a middle tier model we use in my new area that's shared internationally as a middleware API].
  • AJAX.NET - prototyping done to test several UI features.
  • Positional/XHTML rewrite of some content to follow standards, eliminate tabling HTML, and optimize for CSS and templating - prototyped and integrated into a beta feature released to production and end users.
  • XML/XSL rewrite of some content - prototyped and integrated into a beta feature released to production and end users. Prototype designed to validate usability of an AJAX-capable menu using web-serviced menu structures that could integrate third-party providers.
  • Templating prototype for Blogger/portal-style user-controlled templating of personal web areas prevalent in application.
  • Social networking + e-learning specification begun to bring together disparate parts of the site that might benefit from having a coordinated theory to bring users together, provide personalization, and provide socialization based on results of FECS studies.
  • Big list of possible features to distinguish discussion board from similar products. Prototype of new code designed but never demo-ed.
  • So you want to be a...level above your current level workbook for various development positions within my department. Step-by-step guide to moving up as far as team/tech lead, even if at the expense of others in the department. Completely outlined.
  • Several certification options examined. Discussed with parent company who used some of the ideas.
  • Open Source examination to look at Cruise Control.NET for integrated builds and various products for persistence frameworking - virtual machines created to host various integrated build tools for evaluation, as well as one for Spring.NET and numerous persistence framework tools. Project code ported to persistence framework tools in half a dozen cases to validate application to site and best fit analysis.
  • SQL 2005 queueing/service broker (SQL callback) - development of usable prototype requested (and completed) by outgoing developer. Several new SQL 2005 features prototyped to optimized queries.
  • RSS feed engine - requested (and completed) by outgoing developer.
  • Reporting Services - expansion of reports. Spec for a dozen more reports to mimic a heartbeat application to monitor intrusion/injection detection, file loading, and numerous web aspects - reports written and tested in beta. Additional reports generated to provide business unit-specific projections.
  • Chat tools analyzed to determine max throughput, initial development mis-steps, proposed changes to handle increased load. Analysis completed and resolution of several persistent issues and optimizations documented.
  • Further research on podcasting [prototype and developer spec fairly old at that point - originally discussed over happy hour beer immediately after Wired March 2005 article - working prototype and aspect-oriented tagging theory completed within two months] and expanded syndication methods (Atom, et al) - several beta-ed and available for release.
  • Examination of REST to create web methods usable by several hundred semi-corporate customers - prototypes completed [cut back to individual who I didn't work for because you were going to be handholding with my old group - this is when you first met me, in line, at Caribou, talking to my sharpest developer about REST-related coding and microformats].
  • Use of Log Parser to cut log reporting latency for users and business reporting from 24 hours to the sub-five minute mark and to cut out extraneous processing of logs for corporate purposes - prototype completed and optimized for sub-minute execution. Parameterized to generate numerous rollups. Extended to handle numerous other logs in the system, including XML files generated by logging tools, logs generated by other corporate systems, and web path data for individual signons [I just recommended Log Parser 2.2 to a group about a month ago to resolve some issues they couldn't solve with an internal DBA group. It took their developer less than an hour to implement a solution that had already taken several hours of email discussions for a report that was considered unreproducible by DBA].
  • Wiki-on-the-site spec and proposal - initial wiki code with custom features for our product modeled in various implementations and various stages of completion.
  • Research into using several new corporate systems as short cuts for development and extensions of existing functionality - several being watched and a spec for the integration of one started [it's being looked at this year - I know because I work with it].
  • Spec to create a corporate presence with guests and experts on the site - idea forwarded, code base part of wiki/syndication initiatives.
Wow. Those were just items from a list in my notebook - not the nuts and bolts issues that were in my Important workbook and Semi-Important workbook with individual sheets for each developer, a sheet for non-specific-developer initiatives/work, a sheet for yearly cyclic work [which I was keeping to decrease cyclic work - and which was achieving that result], a sheet for developer-targeted features and optimizations, or the team-lead work on SOX, compensation, and hiring to replace two outgoing developers (including the one I thought would take over as tech lead), an outgoing team lead, and eventually myself as tech lead.

On a positive note, I find myself much more relaxed. I code for fun, although not generally admitting it for fear that Mean Mr. Mustard might want me to help with his CDFFL project, spending any overage hours helping internal groups I've worked with in the past turn my old projects into enterprise-wide applications that no longer need my expertise, or templating those old projects for use by new groups that need similar functionality, or else reading books on programming that in the past I would have read on family time. Hands on is always the best way to learn, and I see the small slips when I talk to my developer friends sometimes - but looking back, it was the right choice, despite a small decrease in career velocity.

No comments: