Caught in the Devil’s Bargain

After a year of successfully avoiding real work I finally succumbed to peer pressure and got a legit day job. So far the new place seems cool in alot of ways. They’re a software and technology startup, but big enough to have offices in several cities around the world including one in Manhattan and one out here in the ‘burbs, pretty close to my house, and I’ve be alternating between the two. They have a mature product and the focus is on sales and growth and making our stuff scalable. I’ve been brought in to lead the front-end development on version 2.0 of the product. Most important to me is their line of work. They’re in cloud computing, a bit of a niche market right now, but they’re ahead of the curve and my feeling is that in the next few years everyone is going to need this technology. Our clients already include Verizon, Barclays and Cisco, with more coming on every week. Hello yacht!

But before I get into the new gig, and I should wait until the warm fuzzy glow wears off, I want to reflect on the whole process of finding a job in {{current year}}. Actually I just want to rant about the hubris of your average potential employer. I am a software architect, engineer, designer and developer with 25 years of professional experience, and 40 years total creating software. (I started programming computers when I was 8 years old, the same year I started playing saxophone and doing origami). Believe me I’m at a pretty high level. I’m a world-class developer, the mythical 10x contributor, and my skills extend well beyond the technical into many other areas. Last time I was on the market looking for work was 12 years ago. I’ve switched jobs a few times in that interval, but only because someone I know and trust invited me to join them somewhere. In fact this is only the second or third time I’ve looked for a job in the traditional way. So this is a rare opportunity for some lucky enterprise.

At the start my main goal was to take some time off and explore what’s out there, so I largely let the mountain come to me. Recruiters would cold call constantly, and I’d reply if it seemed like a promising place. They operate in a weird world of sales, and you would not believe the number of bullshit startups out there doing “something around social media and big data”, or something equally dumbass. The software industry was very wild-west in the 90’s, but now it’s become something much worse, more borglike. Most places are run by greedy pointy-head bankers and their henchmen middle managers whose goal it is to pretend that people are interchangeable “resources”. It’s up to the individual to fight the good fight.

The process is designed to put all the risk on the side of the employee. They constantly seek to put you in box and at a disadvantage. Most places require a technical interview, which is fine, cuz they need a way to figure out if you know your shit. But many places aren’t good at this at all, cuz they don’t know their shit. They get hung up on stupid minutia like language syntax, or ask you to middle-school level problems like bizz-buzz. Some places, like Google, do an online session, which is better, but only if they put a guy on it who can communicate articulately and has a clear grasp of the English language. In any event they have no way of judging what makes a great developer at higher levels, so they focus on passable according to some arbitrary metric at lower levels.

In lieu of that some places have a take-home project. I’ve seen a few where they expect you to write a full-on web application with a bulleted list of requirements. I don’t know how they can expect to attract quality talent with an approach like this. My time is valuable, so anything that takes more than an hour or so needs to be compensated. I sure as hell ain’t gonna do a whole day’s work for someone on spec, especially some vaporware outfit I’ve never heard of. In these cases I’d tell them politely I’d expect to paid at my usual consulting rate. They’d either quietly go away or respond with some self-righteous bullshit. Never did one say yeah, it’s only fair, I’ll pay you for a day’s work. I mean would you ask a dentist to show up for a day and pull some teeth, or a lawyer to spend a day in court?

All of this is a signal that the prospective employer doesn’t really know what they’re looking for, can’t recognize talent when they see it, aren’t interested in bringing you on in a relationship of mutual respect, and honestly aren’t serious about filling the position or probably even running their company.

The worst of all of these was America Online. Yes, believe it or not they’re still around, trying to re-invent themselves as a content destination. I don’t know why I accepted the interview, mainly out of curiosity. They were across the street from where I went to school at NYU/ITP, in a trendy loft in Greenwich Village. But when I got there it was a miserable overcrowded open plan office like a sweatshop. It was so noisy I couldn’t imagine how anyone could get any work done. They were all walking ’round with tombstones in their eyes. They guy who would be my boss didn’t even bother showing up, just phoned it in. Another guy, a really fat developer, asked me “Our motto here is work hard, play hard, what does that mean to you?” They had a booth there like a mini TV studio where they did webcasts. The day I was there the guest was some porn star who’d written a book (I’m guessing she had a ghost writer). To top it off, their project and technology seemed interesting at first, but once I started asking questions about it it became clear the whole thing was a horrible hack built in grunt in the worst possible way.

I actually applied for a few jobs on my own, when I came across something interesting, usually prompted by a fit of frustration at the absurdity or it all, and these turned out to be where all the serious leads were at. I had four job offers that were worth considering, and the interviews all had this in common: pretty much as soon as I got there, within minutes, they stopped asking about toy problems and started asking how I would solve the real business and technology problems they had in front of them, although they usually wouldn’t let on that they’d made that transition. This of course led to much richer and more interesting discussions, and as soon as I perceived what was up I knew this place had potential.

In fact my first assignment at my new gig is to implement the solution I sketched out 10 minutes into my interview.

Global Jukebox Update

I’ve been doing tons of work on the Global Jukebox recently, adding new features like Journeys and Learnings, and continuing fix up and modularize the codebase, trying to get things tight for a deadline to give a demo. We had an unexpected monkey wrench last week when the Smithsonian Institution reneged on an agreement they had to let us use a bunch of Alan Lomax’s own recordings to which they hold the copyright. They wanted to charge the project hundreds of dollars per song, for around 1000 songs. Doesn’t really seem in keeping with the public spirit of an institution supported by our tax dollars.

As a workaround someone suggested we embed a spotify player, since the songs in question are available for free on spotify. I did some research and it turns out Spotify has an API that allows you to do such a thing, so I made a little proof of concept where their player appears in our app. One downside is the user needs a spotify account the hear the music. If they don’t they’ll be prompted to create and account, which is free, so that’s not too bad. The other downside is that spotify is not aware of our song coding system, so for every song one of the graduate assistants needs to find the song in spotify, get the embed code and enter into our database to associate it with the correct song. Then I need to write some code check if that embed code is there when I load song data and bring up the spotify player with the correct code. I sure hope spotify doesn’t change their API once we get this up and running.

I got the news from Anna that the demo was today and it went very well. Hopefully this will lead to more visibility and funding for the project. Meanwhile I’m at a point where there are alot of loose ends to finish off ASAP and a bunch of new stuff on the horizon.

As I’ve been refactoring the old code and trying to keep things from breaking as I go, I’ve been giving alot of thought to Javascript as a language and the web application as an environment. I started programming in Javascript in the 90’s when it was still in its infancy, and working in JS was a mess to generally be avoided. Well Javascript has grown up alot, and while it still has some pretty deep flaws, I’ve come to feel it’s time to come to get to know it on it’s own terms and stop thinking of it as a broken version of Java. For example, maybe it’s not bad that there aren’t any classes or strong typing, and maybe it’s good that everything is just an object.

I bought a whole bunch of books recently and have read the first few. It turns out I already reinvented a few best-practice JS design patterns on my own, including self-executing functions with closures to model class-like objects with private and public methods. One author compares JS to the so called “classical” languages, and speaks of classically-trained programmers. I had this aha moment in jazz, playing a Gm7 chord without a G voiced anywhere, and realizing that’s something a classically-trained musician wouldn’t do. Unfortunately no one in the group is into programming languages, so I couldn’t really share my epiphany.

In any event it’s time to unlearn. I’m trying to reevaluate JS from a functional programming perspective. I’ve had some exposure to Lisp and Smalltalk and more recently Scala (which ironically compiles to the JVM), so I’m trying to step back and see things from a broader, more fundamental perspective. Which of course is not that easy when you’re trying fix up someone else’s mess so you can build new features on top of it to meet a deadline, but that’s the life of a software engineer. Hopefully I’ll have thought things thru enough to have something to share in a near-future post.

Global Jukebox Update

The Global Jukebox project is far enough along that I can share some screen grabs. The basic features are in place and I’ve completed a pretty comprehensive first pass at applying styles to everything. Behind the scenes the song play tracking is largely in place, which is a prereq for go-live. There’s still some UI details to attend to, as well as some ongoing refactoring, but now the focus is transitioning to building out the next round of features, including Choreomterics and Journeys. You can learn more here:

zingman.com/portfolio/theGlobalJukebox.html

Winterlong

All quiet on the western front. It’s getting into the second half of winter and I’m starting to feel hopeful about spring. Lizzy is in Switzerland. Michelle got her braces off the other day.

I’m working from home these days, and I must say for the most part it suits me. My health is better then it’s been the last few winters. No getting up before daylight to stand out on the train platform in the bitter cold. No colds or flu, no back or leg pain.

I’m still rehabilitating my shoulder. I can do all the exercises I used to before I injured it, pushups and free weights, but on bench press I’ve plataeued, and every time I try and add weight it starts to hurt, so I go back down and wait a few weeks to try again. This last time the soreness went away faster and I’m ready to try again after only a week.

I have a pullup bar that sets up in a doorframe, and I’ve been using it in the doorway of wizard room (the closet under the stairs) for like 2 years. The other day the molding there cracked, so now I’m thinking about how to rebuild it stronger.

OTOH with working from home there’s less human contact. I’ve been getting out on the weekends, to dinner and the movies (Star Wars) for Jeannie’s birthday, to a party at Nick’s, and surprisingly saw a really good jazz group at a fundraiser at Michelle’s school. The band director is an amazing drummer, especially at Latin jazz.

For Valentine’s day I took Jeannie out to a local restaurant, Infusion, that I’ve passed by hundreds of times but never went in. But then I found out the bass player Jay from my Saturday jazz group was playing there with a guy on vibes as a duo. It turned out to be a very nice place, classy, dimly lit, with very good quasi-French food. They seated us right up near the band so I was able to suggest a few songs: My Romance, My Funny Valentine, All the Things You Are, that kind of thing. They were really good. Just the perfect thing, and a really pleasant surprise.

Before I found out about Jay’s gig the plan was to go to Burke’s bar, where LEFT HOOK is playing next week, to check the place out. So we went there afterwards for a drink of two. It’s a pretty big place, a step up from the joints we’ve been playing. The calamari is yummy and they got lots of different beers. They have a nice big stage, but we still have to bring our own PA. I don’t think they had a band that night cuz it was pretty dead. I’m sure bitter cold snap was keeping people home.

The Global Jukebox project is coming along. There was a bit of a crisis a couple weeks ago cuz they’d used up the money for my initial contract but we were only about halfway thru the projected work. By the end of the first week we were already several weeks behind schedule, as we discovered that the database needed some serious work, the codebase I was taking over was a mess, and there were lots of little things they’d need to go live that they’d never thought of. Growing pains getting from a prototype to a product. Like I said, they’re not software engineers. But they found some more cash and were able to extend the project a few more months, and they’re working on getting funding for a whole year. I hope it comes thru. They have alot of great ideas and I’d really love to be able to do it right.

I finished a major milestone build last week. Done the first major round of refactoring and getting the core features in place. Still lots of little cleanup and loose ends, but I hope to have something sharable soon.

I’ve also been learning Python and Django (the D is silent), since our database guy has limited availability and there’s lots to do on that side.

Believe it or not I’m still negotiating with my publisher about the origami airplanes and spaceships book. I thought for a while it was totally dead, but now it may happen after all. The point of contention was the graphics they want printed on the paper. I have a pretty strong idea of what I want and what I don’t. My feeling generally is that it should be pretty minimalist and not detract from the folded form. After they saw my samples they thought it’d be a useful guide, but wanted to have their staff graphics guy do the graphics, and to add insult they want to pay him out of my advance.

Then the sample graphics they sent me were a travesty. It was not my model, and not for my book, but it was a picture of a very cartoony robot slapped on a sheet of paper that didn’t look like anything like a robot to begin with. It looked like they reinvented the back cover of Mad Magazine!

So I said no way, I’ll do the book my own way and get another publisher. Then they decided they wanted to negotiate. First they agreed to pay their graphics guy out of their share. Then I said I’d only go with them if they gave me some sample graphics for my models and I approve of them. Surprisingly they agreed. So that’s where we are now, waiting for them to produce some graphics.

I’ve been thinking of buying a new synthesizer. It turns out Moog is making reissues of their classic analog synths, but with modern components and with midi and digital control/memory/recall. You can get a full-stack modular moog a la Keith Emerson for a mere $35,000, not including keyboard, ribbon controller, extra modules, etc. Or you can get a modern day MiniMoog for about a grand.

BTW, I learned the other day the original voice of R2D2 was an ARP 2600 synthesizer, one of the first “semi-modulars”. It also appears on a bunch of Rush albums beginning with 2112, and on Edgar Winter’s Free Ride, which my rock group learned and then abandoned because it was too high for our singer.

So in closing, here’s a reminder that LEFT HOOK has a gig coming up a week at Burke’s Bar. We learned 5 new (keeper) tunes including Sledgehammer by Peter Gabriel and Beginnings by Chicago. Very rockin’!

The Global Jukebox

I recently took on a very fun and interesting client. It’s Alan Lomax’s Global Jukebox Project. For those of you who don’t know Alan Lomax was musicologist who, beginning in the 1930’s went all around the world, from Texas to Siberia to all over Africa, Europe, the Caribbean, and even Buffalo, NY, building up a comprehensive library of folk music from all different cultures. Then he thought about ways of comparing them scientifically to see if they reveal anything about the relationship between the characteristics of the music and characteristics of the culture. It turns out they do.

Along the way he invented a thing called Cantometrics to evaluate the music along an exhaustive list of parameters. The results are really quite revealing – as a musician I’d even say mind-blowing – and are encapsulated in his book Folk Song Style and Culture. Highly recommended reading. It’s very well written, and ultimately speaks directly to the question of why all human cultures make music, and why different kinds of cultures make the kinds of music we do.

Except now you don’t have to read the book, because we’re building a web site to bring it to life! The Lomax foundation has literally thousands of hours of field recordings, backed by an immense a meticulously catalogued database. We’re pulling it all together to present interactively, using different ways to visualize the relationships including maps, trees, lessons and journeys.

I must say it’s a refreshing change from corporate, agile-driven software work. As the front end developer and UX/UI designer, I have alot of freedom to shape the site. They’re academics, and while they’re very smart and care deeply about the work, they’re not software engineers or interaction designers, so they’re also very hands-off and trusting about things in my domain. They also tend to be more laid back, creative and open, so it feels alot like R&D work. Right now it’s a fixed-length contract, but they have enough ideas for years of work, so I hope they have enough money too, and the gig transitions into a long-term relationship.

This is also by far the oldest legacy codebase I’ve ever worked on. The original Cantometric data was originally encoded on punch cards in the 50’s thru the 70’s and entered into an IBM mainframe computer at Columbia University. Sometime in the 80’s someone ported it to C or maybe Pascal, and into a relational database on a PC or a spreadsheet on a Mac or something. Then apparently in the early 2000’s they ported it again, this time into a modern platform that was web-ready and could be queried using mySql. Then they spent an enormous amount of time digitizing all the music and cleaning up the data. That bit still isn’t quite done, and my first programming task had to do with rights and clearances.

Still, it’s interesting how computers were part of the vision from the beginning. In Folk Song Style and Culture there’s an appendix explaining the software at the time, mainly the data encoding and the statistical analysis work. I haven’t looked forward to reading an appendix so much since The Lord of the Rings!

Mo’ Better Responsive

I’ve pretty much completed a first pass at making all the pages on my web site mobile-first responsive. Along the way I made a hit-list of items that were too much trouble for the first pass, so now I’m circling back to them. They mostly fall into one of a few categories. First is tweaking the existing styles and fleshing out new ones so the page layouts look good under all resizing and formats. Things like font size, padding and spacing. There’s also a few pages with unusual formats that still have to get converted. Some of this gets pretty subtle and I didn’t want to let it slow me down, but it’ll be worth it. Second is adding new content to the existing sections, and I’ve been doing this on an ongoing basis. It’s getting easier now, as the templates are all largely complete. You’ll notice an expanded roster in the music section, for example. Third will be some all-new presentation formats for the audio and visual elements of the site, but that’s still a little ways off. So for now, go click around and see what you can see.

The Devil You Know

Not too long ago I took a job with an ad agency as a consulting software developer. This was not the first time I worked in advertising. Many years ago, I co-founded Radical Media’s interactive division back in the 1990’s. (Technically they were a media production company, but alot of their clients were ad agencies, including the one I took a job with, and there’s alot of overlap) and I did all sorts of fun and exciting and groundbreaking stuff there. Since then I’ve done freelance ad jobs here and there. It’s actually surprising how little the ad business has changed in twenty years, the corporate culture and all. Stuff that was innovative back then is just business as usual now.

Being a temp position, so there’s no telling how long it’d last. In orientation they gave us alot of feel-good propaganda about how great advertising is, a lovely coffee table book and all, and really who would expect anything less. Good that they really cares about visual design, and to be able to use my design skills, and nice that they’re small enough so you can talk to people on your own floor if there’s some kind of tech problem. The place was totally chaotic however, in a sort of sleepy, hurry-up-and-wait kinda way. I spent three days waiting around for a computer, using various loaners. The computer they finally gave me was messed up, so I spent two more days trying to get it working before giving up and getting another one.

When I got on a project, they threw two other new hires onto the same piece of work. It was not deep but it was wide, and they really wanted to get it done fast as possible. Must’ve been money at stake with the client, so from their perspective this was a sensible way to do it.

The entirety of the work was tweaking CSS to make the site match the comps. Problem was the CSS, which was supposed to be hierarchical in an OO sense, was really a tangled mess. On top of that, there were hundreds and hundreds of auto-generated files that were not under .gitignore, so every time you checked in code there was a shitstorm of conflicts to wade thru. So with six people working in parallel, we all kept overwriting each other’s changes. I never lost any of my work, but most of the others weren’t as careful. Fixing any of this was out of the question cuz it would’ve blown the deadline.

On the third day our git repo exploded and work ground to a halt. The devops guys restored by the next morning. Fun fun fun.

So we worked thru the weekend. By this time we were completely off the script, so I literally spent a whole day with creative director, with him going “move that 10 pixels down” and me making the change in the code, and then him going “hmm, no, move it 5 pixels up.” He seemed a little put off by me questioning why their process wasn’t better. Like I said, the industry hasn’t learned anything in twenty years.

Then Monday the deadline came. I spent another day doing some minor fixes, and that was that. We spent a couple days chilling waiting on a new project. I spent my time reading up on git to see if I could avoid another gitpocolypse in the future, and on responsive frameworks for CSS.

Then we got a new project, a web site for some investment bank portfolio services. Again very CSS-heavy, with some animated charts’n’graphs and things. They gave us access to the git repo, but told us not to start work just yet, as the account people were still working things out with the client. A couple days after that they the deal fell thru and at was that. Of course they thanked us profusely and sincerely hope they can work with us again. And so it goes.

Responsive, Mobile-First

It’s all the rage these days in web development to make your web site responsive and mobile-first. What that means is that it will look good on your phone or tablet, and you don’t have to rewrite the entire web site to do that. This is something I’ve been meaning to do for my site for a long time.

I recently took a consulting gig where making everything responsive, mobile-first is the main focus. There’s a ton of frameworks out there to help you do this, so I spent some time surveying a few of the more popular ones. It turns out the alot of these frameworks are pretty heavy, and pack in alot of design assumptions that might or might not fit with your vision.

For my own web site it’s total overkill, so I decided to roll my own responsive grid work. So far it’s pretty basic, but I can add on to it as needed. The basic definitions can be found at: zingman.com/css/zmpGrid.css. So far I’ve implemented it on two pages: the main home page at zingman.com and the music landing page at zingman.com/music. Go ahead, resize the window, then go look at it on your small, wireless device! It may take a while to update the entire site, but everything is all tempalated out already, so look for more responsive, mobile-first pages coming soon!

The Devil You Don’t Know

I recently had to turn down an offer for a bank job. It was tempting – it seemed like a very cool project, right in the sweet spot of my skillset, a combination of front-end and full-stack, of JavaScript, Java and API design, on the same scale as what I’d been doing in Platform Engineering, and a good opportunity to learn about the finance industry.

However, the pay wasn’t great, no better that I’m making now. But the real problem was it was thru a headhunter. All seemed okay until the bank decided they wanted me and the headhunter made me an offer. When it seemed like an offer was in the offing they actually asked “should I just accept whatever offer they make?” Seriously? Then he came to me with the offer and wanted me to say yes on the spot.

Naturally I had questions and concerns. It was a temp-to-hire position, so the main issues were around the move to the staff position. Jeannie was in a similar situation a year ago: they told her it’d be a six month contract-to-hire, but then they dragged it out for a year, and then when they offered her a staff position the salary was lower than what she’d been promised. I told all this to the headhunter (same agency btw), that what I really care about is the staff position, the temp position is just a speed bump, and I wanted to negotiate the terms of the staff position upfront. He’d mentioned a 3 to 6 month contract and a VP level staff position. Imagine that, me bank VP! And my kids’ friends all think I’m a hippie. But dude wouldn’t offer anything more solid than his “expectation”. When I pushed he wouldn’t budge, nor commit to anything firm. Dude insisted I give him answer by the next morning. The time came and went. Meanwhile I talked to the guys at the bank directly, and they were talking about up to 18 months as a contractor and an as-yet-undetermined staff title.

So I had to pass on that one. Headhunter dude was then like “well if you change your mind let me know.”

Plus the commute was kinda long anyway. Ah well.

Technical Reference Guide 2015

As some of you gentle readers may know, I’ve been a-lookin’ for a new job over the summer and into the fall. A mainstay of the industry now is the dreaded tech interview, which wasn’t really a thing last time a went a-huntin’ close to ten years ago. But now they’re all the rage.

In a way it makes sense, cuz whoever is interviewing you needs some way to evaluate your skills and all that. There’s no way they can judge if you can write advanced, subtle and poetic code, so they settle for a much lower level test: can you regurgitate some basic stuff? Still, it’s not always easy to think on your feet and come up with a good answer on the spot. I haven’t used alot of this stuff in my day-to-day in years. Doing a tech interview is a skill in its own right, a kind of performance like jazz improvisation, and it took me a few times to get good at it.

Along the way I compiled a handy quick reference guide. Basically every time an interviewer asked me a question and I didn’t know the answer, or more commonly just wasn’t able to express it in a clear, structured and smooth manner, I wrote down the question, went home and looked it up, and added to my guide. Then I circled back and studied up for the next interview. Before too long I started getting a fair number of repeat questions, and was able to nail more and more of them.

This is not meant to be any kind of comprehensive tutorial, just enough to remind me to spew forth some talking points. As you can see by the topics covered, I cast a fairly wide net with my skillset in the kind of position I’m going for. Really this is a symptom of the state of the industry these days, the way jobs are balkanized by programming language, more than my own itinerant tendencies. “Are you a java guy or a javascript guy?” Oh please. I know like twenty programming languages. And if I don’t know any particular thing I know how to look it up. It’s also a fairly interesting snapshot of what languages and frameworks an in vogue these days, totally different than 2007.

So here you go.