Archive for the 'tech' Category

support and creativity

Wednesday, July 25th, 2007

I’m sure I’ve written about this in the past somewhere… buried in my posts. For the sake of emphasis, I suppose, I’ll write about it again.

Last night I sat down with Troy to talk about all the stuff you never get to talk about in meetings. Some of it was personal, some of it was business, some of it was my personal thoughts on his business. One of the big topics, which was an extension of a discussion that started in a production meeting a few weeks back, had to do with people wearing different hats in the organization.

I’m all for cross-functional team members when it comes to a very entrepreneurial boutique firm like MetaFoundry. We’re all really skilled and talented, and have interests in different fields, and are capable of doing great things in different areas. For example… I may be asked to do the db design on one project, and squeak out a few scripts on another, while participating in the discovery for a third. A designer might fiddle around with the CSS for a site to get it to do what they picture in their head.

One of the lines that I think is difficult to cross is the one that exists between the “supporters” and the “creators.” The creators are an eccentric bunch. At least the good ones are. They’re responsible for delivering great work to the people that request it. That can be any number of things from reports to software to pamphlets, etc. The supporter’s job is to make sure that all the creator has to do is create. No worrying about clients, scheduling, resources, lighting, etc… just create.

This can also be described as Joel Spolsky’s Development Abstraction Layer:
“With a software company, the first priority of management needs to be creating that abstraction for the programmers.

If a programmer somewhere is worrying about a broken chair, or waiting on hold with Dell to order a new computer, the abstraction has sprung a leak.”

It’s worth reading a couple times, but the point is pretty clear. In order for those creative (and therefore temperamental) creators to do what they do so well, they shouldn’t have to worry about stuff. Have you met many programmers that were good at project managing themselves?

What’s always the challenge is applying these idealistic concepts to a tiny, shoestring organization. I enjoy doing this: taking abstract concepts and figuring out how to make them work in real-world situations. It’s pretty much my job on a fundamental level. I’ve done it before with some other development concepts (I’ll be sure to talk about soon :) ), and this support/creative balance is at the core of it.

The glue that keeps these two halves together is process.  There are a few buzz terms in development that chastise the overuse of process, or extol the virtues of rigid processes.  The one that I always try to keep in mind is “people over process.”  In the end, a process is meant to *help* the people, and if it doesn’t, then it doesn’t serve a purpose.  If you can’t come up with a simple, easily justifiable reason for how a process helps someone, then it’s likely that it’s unnecessary.

On the flip side of that coin, a lot of day-to-day pain and suffering of either a creator or a supporter can be eased by establishing a sound process.  For example, the daily interaction between a project manager and a developer can involve a lot of back-and-forth of questions and answers.  The project manager will want to know the details of how and when a certain bug was fixed, and the developer will ask “what was that list of fields they wanted added to that form?”  Lots of back and forth gets tiresome to both people, as they’re constantly interrupted in their work.  If they had a ticket tracking system to post questions and look up details, they wouldn’t have to interrupt each other for mundane questions.  The process involved here is requiring them to *use* the system, and to use it well.  In the end, it’s to both their benefit.

And the key word there is “both.”

running on rails

Wednesday, July 25th, 2007

After months of screwing around with it, I finally sat and read a bunch of people’s blogs and documentation on it, and got rails running on my box! Yay! This will help a bit with some of the prototyping I’m planning on doing. I’ll keep you posted.

so very busy

Friday, June 15th, 2007

I’ve been fortunate enough lately to have no shortage of work to do. Actually, some would describe it as an overabundance, but I say no such thing! But it’s true, when it rains, it pours.

In addition to all the usual brain-scratching fun I’ve been having at MetaFoundry (where hopefully we’ll have the new site up soon), I took on a mini project so I could learn RubyonRails. It’s going really well! I’m now a fanboy. Go ahead, mock me. With the exception of the still painful server setup/config, it only took a number of days to get a catalog up and running. Big change from the old days, I’ll tell ya that much. The dark ages!

Next, I started working on a yet-to-be-announced project with some smart people looking to revive the profile of Silicon Alley. I’ll tell you more when we finally get it to where we can release it. Yesterday proved to be a very New York day in the alley. I met the ringleader of the project at a design firm on Broadway and Houston. As it turns out, they do MusicNation, which is Neil’s gig. So I drop Neil an email while I’m sitting there. He replies that he loves them and to say hi, so I do. It’s nice to make fun connections like that. Plus, it was a really great meeting. Then, we head back to the office to take care of the tweaks and changes, and witness a drug deal in the stairwell. Then we find out a laptop and router were stolen – likely by Verizon. Then I go to get lunch, and see a 6′7″ tall German man walking down the street having a philosophical conversation with three black little people. Seriously, I’m not making this up. Only in this town.

Another big dealy that I’ve been working on (which is keeping me up till all hours doing work) is with Mahdad Taheri over at TVI / Noo. He’s got a new idea of how to expand Noo to beyond just New Years, and he desperately needed tech help. I gotta say… I talked to him, reviewed the business plan he’d been working on, and it all looks good! Plus, I know how Mahdad is. He decides to do something, and he does it. No half-assed waiting for funding working 2 hours a week. It’s serious. So, I’ve joined him in this venture as CTO, which means I get to fill in all the tech bits of the business plan, set up a plan for development, find a developer, and get crackin! We want to launch it this summer so it’s ready and tested for gift season. I’ll fill in more details as we get close. Anybody know any developers?? :D

crazy idea bout cell phones in quiet places

Monday, April 9th, 2007

It occurred to me the other day, there *is* a way to deal with stupid ringing cell phones in public places. We just need to get manufacturers in on it.

You know Bluetooth, right? Most cell phones have it now. More will as time goes on. Bluetooth has these feature/profile things where different phones can do different things like “send file” or “send my number” or “stereo audio” or just “headset”. They need to make a new one “silent trigger.”

Here’s how it works. Your phone has bluetooth. You go to the library. When you walk through the door, there’s a very small, subtle device that sits in the entrance, and as you pass by, it pokes the bluetooth on your phone and goes “hey, quiet place, go silent!” The profile on your phone detects the signal, and goes “okay, silent mode!”

Turning the ringer back on is your own responsibility, but in the meantime, all those annoying forgetful people who are inconsiderate and have their phones on loud ringer in church or the movies or concerts… they’d be silenced without any hassle!

Isn’t it brill?!

Maybe it’s patented… gotta look it up.

Update: looked it up, it’s not very popular or anything, but Bluelinx makes something like this.

hooray! one email to check!

Wednesday, February 14th, 2007

Finally Google has gotten around to pushing the Gmail Fetch tool! So far I’m quite pleased. But take my advice – if you set up your gmail to forward messages to your phone via sms (which I love), remember to turn that off before you set up the Fetch. Otherwise, you’ll get 300+ txts to your phone, which gets tired after a while. Glad I don’t pay for incoming txts. Other than that it checks for mail frequently enough for me, and I can read and reply to messages from the gmail app on my phone. How exciting!

proof of concepts

Monday, January 22nd, 2007

There is a practice in the automotive world that is pretty well known to the non-car-obsessed person on the street: concept cars. Every day a group of creative out-of-the-box thinkers is working on a car that a) is designed for 20 years down the line, b) will likely never be produced or sold, c) probably will require a tow truck to move it (not designed to drive), and d) has a slew of totally bizarre and that’ll-never-work toys built in. We’re talking 20-foot long 20 inches tall, made of 90% crystal clear aluminum and 10% Kevlar, has headlights that blink like eyeballs, seven tires, and a collapsible bicycle that fits in the trunk. Totally impractical.

These little expensive useless toys are the cornerstone of the automotive industry. A few times a year, at the really important car shows, every automaker drags out their latest concept, sticks it on a rotating platform with wacky lighting and Carmen Electra’s hot twin sister wearing a napkin and some dental floss, and says “look what we can do with $20 million!” It’s the Miss America pageant of the car world.

Automakers give the “paper” designers all the latitude they could dream of to draw pictures of a beautiful car. Then they give their R&D people lots of caffeine and a new server to render their CAD drawings so they can make current equipment better, and invent the rest. And right on down the line, they encourage their concept workers to go crazy with their work; to make the fastest, coolest, flashiest, shineyist, sexyist car on the planet.

Nearly all of what goes into a concept car is piled in the ash heap each year, but from those embers the designers and the engineers get fantastic ideas for next year’s vehicles. They get feedback from journalists and enthusiasts. They realize that they can make that crazy idea work, so they build it.

I love this institution. It’s a piece of my childhood mind that I still have to this day. When I check out those concept cars in person, I think back to all the concept cars I experienced since I was little. My imagination clicks on, and suddenly I’m there, in the driver’s seat, pushing all the buttons and shifting it in gear, and rounding the curve at top speed. On more than one occasion, I think I’ve drooled.

Then I got to thinking: why doesn’t this exist in software? I mean, it kind of exists in the form of betas, but by the time something gets to beta or even alpha stage, it’s far beyond the “concept car” stage. Unlike a beta, a concept car is never meant to be built – that’s not the point. Google has Google Labs, but even that is more of an incubator of betas than a showcase of concepts.

Who is out there dreaming up the next big idea in design? Or the next AJAX? Where’s the big show where Google and Yahoo! and eBay and AOL bring their (semi-functional) concept sites to show off their amazing designers and brilliant engineers? This could be a practice that everyone can get in on. Any product that is meant to last more than one cycle needs to have this concept phase. We need to take our dreams of what’s next and make them a reality in earnest.

I guess maybe the reason this doesn’t exist yet is because the software (specifically web) industry is still working on getting their version of the internal combustion engine working right without breaking down. It took Ford a while before he could start getting creative with his horseless wagons. But then again, maybe it’s time to start pushing ahead instead of trailing behind. If for no other reason than it’s fun.

Venn Diagram of the Web

Tuesday, January 16th, 2007

For some weird reason, this weekend my brain started drawing a diagram of functions on the web. I think it had to do with contemplating the full usefulness of tools like Weebly that let you make a quick and dirty site. I know that to a lot of people “Content is King,” but the king surely isn’t the whole kingdom. So I started wondering how things play out functionally on the web:

Venn Diagram of the Web

What I found is that there seem to be four major functional areas.

  • Content
  • Transactions
  • Communication
  • Networking

Content is content. There is text, images, photos, videos, data… the kind of stuff that goes in and stays. It’s the stuff that you C(reate)R(ead)U(pdate)D(elete) from time-to-time. Within content, there are two kinds: Flat and Relational. Flat is stuff like articles or photos that are of value on their own, or in one-dimensional groups. Relational is stuff that is strongly categorized, hierarchical or inter-related, like a product catalog for light bulbs. Somewhere in between those two you get meta-data, which is the stuff that gives those flat pieces of content some dimension. It helps them relate to eachother, but not in the strong integrity of a database.

Transactions are when stuff is exchanged. Online banking is pretty much a matter of shifting money from here to there. yes, there is relational data in there, but the data itself is used for shifting money (or value, or whatever) back and forth, and isn’t of much value on its own.

Communication is the digitization of what we’ve done for thousands of years. The media we use are pretty few in this arena, and little by little they’re becoming more cross-functional like Skype or gtalk. The webmail I refer to means any in-site asynchronous threaded dialog. In some cases, this is public discussion like a forum, in others it’s private messaging. By alternative, the uni-directional asynchronous communication is comments – either to blogs or to MySpace pages, or what have you.

The newcomer to the game is Networking. It’s pretty simple and straightforward, but it’s what’s given the Web it’s little “2.0″ when it comes to functionality. There are sites out there that are either all-purpose, wide-open, no-limits networking (like MySpace or Friendster), and there are the sites at the other end of the spectrum: very narrow and focused, even walled off (aSmallWorld). What MySpace has done in this arena moreso than anyone else is embrace content. Instead of just saying “yeah, she’s my friend,” it lets users express their individuality through content – videos, photos, blogs, music, … – with little limit. Maybe that’s why they’re the big one ;) .

So, where’s Google in all this? They did something smart. They built a second-level on to this diagram. They said “Let’s organize the world’s information and make it universally accessible and useful.” They started out by making it possible to get at anything in the Content bubble. Now they’ve tip-toed into every piece of this diagram. Communications – check. Transactions – check. Content – check. Networking – er, um – check. No wonder they’re worth Goo-gillions. Yahoo’s working on the same thing, albeit a little behind. Others have carved out little niches, like Indeed with job listings and this new Wikipedia search engine.

Is this everything? Absolutely not. This is just version 0.1, off the top of my head. Why’d I do it? So I could sleep at night. What is this good for? It’s a lot easier to take over the world if you have a map.

go big

Monday, January 8th, 2007

I’m not exactly sure who recommended it, but there is a book Go Big or Go Home that’s a how-to for growing a startup. It’s pretty popular, actually, and heralded as instructional rather than anecdotal.

Just the title of the book is something that I need to tell myself pretty regularly. It’s against my nature to be loud and big and pushy and all that stuff that the phrase implies. But I’ve learned from experience that anytime I’ve pushed myself and “gone big” with something, the net result has been positive.

It’s a little like gambling. If you bring a sock full of nickles to the casino and play a few slots, you’re almost certainly not going home with the jackpot. But, if you save up some bucks, and spend a few hundred playing blackjack, it’ll last longer, and if you leave the casino up 4%, you can at least afford to buy a decent dinner (and have gotten a slew of free drinks, and a compped stay, and some vouchers for a show).

Same thing with vacation or going out on the town. Whenever we’ve gone out, we go big, and have a blast. We come home with exactly what you would want out of a fun weekend or trip: lots of stories that’ll last forever.

Same thing goes with the stuff I’m working on in the house. I don’t have tens of thousands laying around in cash to throw at this stuff, so I have to chip at it a little at a time. But, I have to seek the best. The paint is top-notch, the trim isn’t cheap, the dimmers aren’t your average slidey-jobbies, and last weekend, in a dual-purpose trip to Boston, I acquired $3500 worth of kitchen and bath fixtures from a friend that are the pinnacle of top-of-the-line (and paid less than cost ;) ). It’s a bit of a stretch right now, but it’s worth it in the end. I end up with stuff that’ll make me happy, and when I go to sell this house, it’ll be one of those “wow” moments for a prospective buyer that might just seal the deal.

Pulling all this back to my professional life, as I said before, it’s been tough for me to “go big” naturally. I tend to be rather conservative and cautious in the way I do things. It’s my nature to be safe and well-planned with serious matters like development. In the past few years, I have learned that playing it safe gets you nowhere. There is little advantage to being conservative or cautious when working on a project or making a choice. It’s the big and brazen moves that get you somewhere and get you noticed (if that’s what you’re looking for).

That’s all very abstract and vague. In a veiled way, I’m illustrating my experience (think pointillism) _outside_ of development. The choices I made in the not-so-recent past tended to be safe and cautious and grounded in pragmatism. All in all, they weren’t bad choices at all. In the past year+, I’ve made some big choices. Bought a house, left my safe job, spent money on renovations, done some travel. All of it has been rewarding, and I wouldn’t do it differently. Stopping to look back and wonder if I could have done it better is good, but second guessing my choices would be bad.

When it comes to development, here’s how it applies: think big. It’s naiive to think that whatever you’re working on right now will always stay the way it is. If that one thing never changes, it’s a bad thing. It means a) nobody uses it and b) nobody cares about it. By the same token, doing something half-assed only means you’re going to have to do it again. In some cases where time-to-market is the biggest issue, that can be overlooked, but for the most part, sacrificing quality is the last thing that should be done when a project is no longer operating in ideal conditions.

In a profession that is as based in logic and mathematics as this, there are some good measurable ways of evaluating the quality of what you’ve done. It’s traffic scalability, it’s adaptability when needs change, it’s the ability to add new features, and often it’s adherence to standards. There is a similarly important and large portion of development that’s aesthetic and subjective, which, to a certain degree, can also be evaluated. Is it appropriate, is it stylistically up-to-date, is it usable.

Whenever I’ve approached a new and unsolved problem, I strive to not only do my personal best, but to have it stack up. I relish the challenge of not only doing what’s asked, but at the very least doing it up to standards. We’re talking database normalization, W3C/508/etc compliance, browser compatibility.

It’s important to me that what I produce is of the highest quality I can muster. Otherwise, I’m just another one of those web hacks out there makin a buck off of people who don’t know better. I’m better than that, and I hope it shows.

levels of control

Tuesday, December 12th, 2006

For as many different kinds of people there are out there, there seem to be different ways of approaching development. These different ways could probably be placed on a “control spectrum” where at one end (for the sake of argument, let’s call it the _Left_) you have the willy-nilly, cowboy-coding, answer-to-no-one kind of development that usually involves one programmer who’s never worked with others before.

This is identified by:
* lack of source control
* no distinguishing marks between ‘feature requests’ and ‘bugs’
* orders being rattled off verbally by the ‘boss’
* development done *on* production
* raw FTP
* programmed in notepad
* sub-par quality
* *fatal* crashes

The quality of the work is so low, that there isn’t even mention of QA, just “why doesn’t this #$*(& thing work??”

On the other end of the spectrum (again, let’s call this the _Right_), you have uber-control. A programmer has the authority to change only the lines of code he has been assigned, must do it in the style and number of characters dictated, as assigned by a black-box ticketing system, at the assigned time, for the assigned duration, at the desk to which he has been assigned on this day by the little lcd control thingy on his keychain (which needs to be authorized once a week), following the 372-page printed code manual given during the week-long orientation in Tampa or Memphis or someplace equally temperate and desolate.

This is usually identified by:
* disinterested programmers
* Everestine code libraries
* rigid feature sets
* long development cycles
* above-par reliable software
* documentation that fills several warehouses in Jersey City
* copious backups

Underneath all of this control is a direct relationship of overhead. The more control, the more overhead:

On the Left, there is no documentation, no tracking of development, no checking in to source control, no release procedures, etc.. At the same time, work is turned around quickly (with the exception of the “x=0″ Left), and is very adaptable.

On the Right, there are additional days, weeks, and months of generating documentation and diagrams, minutes added to development daily for checking in and out, releases are done in a scheduled and controlled fashion, accountability for every line of code, and even more time for testing and QA.

Since I started doing development, I’ve experienced all different kinds, and have a pretty good idea of where I fall in the spectrum. I started out as the sole developer, knowing nothing of good development practices. After a few years, I developed my own procedures to make sure things were a bit more controlled. Once I started working with a team, I learned how my old ways were insufficient, and worked with people to come up with procedures for doing development. I’ve even worked in such a highly regulated environment that my looking up code examples online was identified by the IT department’s proxy as me visiting “online gambling” websites, which warranted a “talking to” (which lead to me leaving that job). It wasn’t until a while later that I started exploring actual development methodologies, and learned not only the error of my ways, but how much I was doing right _naturally_.

As in most things, I tend to be a little to the left of moderate. I’ve picked up the bits of control that are eminently helpful to development and help produce quality code, while leaving behind all of the extra documenty-bits that don’t do anyone any good, save the company that makes printer paper. The question I ask myself is “after this is launched, will I be glad I’ve done _x_?” If the answer is yes, I do it. If the answer is no, I don’t. If the answer is maybe, I need to work out a rough cost/benefit ratio to determine if it’s worth the added overhead.

There are some things that I know I can do better, that involve more control, and thus more overhead e.g. Test Driven Development, and Feature Specs for QA. It feels a little bit like jump-rope… I’m waiting for the right moment to hop into it, but I’m sure once I get in there, it’s just a simple matter of jumping up and down.

lamp webstuff tools

Saturday, December 2nd, 2006

I’ve been back and forth lately on sticking with this blog engine. It’s good… it does the job… but I also set up wordpress for something else, and it’s really that much nicer. I’m going to have to see if I can migrate the stuff from here to there.

I also started messing with Joomla to set up a silly site, and it’s really good. I like the simplicity of the template/css editing (with some usability caveats), and the configurability of display stuff at all kinds of levels. The install went nice and quickly, and from what I’ve seen of the code, it’s nice and lean.

The last tool isn’t something I’m new to, but it’s something I’ve done a lot of exploring with lately. JQuery takes nearly all the pain out of JavaScript for me, whittling it down to just what’s needed to get some interesting and fancy stuff running. I’ve had some trouble with the quality of the plugins, though. If anyone has any good scripts for edit-in-place + select lists, let me know. Doing multi-forms on one page is getting to be a bit cumbersome with the scripts I’ve found.