Settings
Snark
The snark setting regulates the textual content of this site. You can lower it
for a more sanitized viewing experience, or increase it for a more accurate, but
less comfortable portrayal of the world.
Oblivious
It is not immediately obvious that you possess free will. Perhaps you are a staffing recruiter
checking keywords off a slip of paper that a
development team gave you. You need to match a series of technical keywords
you don't understand with a programmer's resume, so the content of this site must be as
straightforward as possible.
You probably dream in bullet-points.
Confrontationally Impaired
You are smart enough to recognize the patterns around you, but are not ready to take
the responsibility of being the bearer of bad news. Perhaps you have kids, and
need that regular paycheck. For whatever reason, you still need to pretend that the ugly
half of reality doesn't exist, even though you know better.
Pragmatist
You work in an imperfect world and are attempting to make the best of
the situation. You feel like honesty should help you get your job done more quickly,
and are willing to take the risk that the honesty may not always be the most comfortable thing to
digest. You will bite the bullet and do the right thing when your back is against the wall, and
you have probably paid the price for doing so in the past.
Caveman
Make good internets.
My words do not scare you because you have no intention of trying to understand the things
I am saying. Perhaps you are a lower-life form, like a Republican. You are usually an honest person,
but that's mostly because you don't know what you're talking about.
Commando
You will not be offended by frank observations of common workday
phenomena, even if you yourself are a part of those observations. Facts are facts, and human
opinion means very little to the machines that will one day rule over us in the post-apocalyptic
wasteland that is assuredly at hand.
You watch "Glengarry Glen Ross" for the warm fuzzy feel-good moments.
I am a web nerd.
And this is my brochure-ware.
I design and build a variety of
amazing web applications using a
rigorous systematic method that will challenge you to
explore the implications and consequences of your own ideas. When you work with me,
you will have more transparent and honest relationship with your product than you
do with your own family.
My code has no problem telling you when your ass looks fat in those jeans. It
will not borrow the car and then secretly drive to Tijuana.
Services
Development
My preferred programming platform is
LAMP
(Linux, Apache, MySql, PhP). LAMP is free, powerful, and well documented. Regrettably, I also have experience
in a variety of now-embarrassing languages such as ColdFusion, JSP, PERL and classic ASP.
If it runs on a web server, I have likely used it at least once.
I prefer working within MVC frameworks. My current favorites are
Zend Framework
(for open-source environments), and ASP.NET MVC
(for the corporate lackeys). You can get the entire laundry list of current
technologies here.
I have several existing and configurable solutions for standard e-commerce and common administrative
web applications. I know you think your project is unique, but at its most fundamental level, it's probably
not as unique as you imagine. This is great for you since it means we rarely have to start from scratch.
Design
Recently, I've returned to design work. Not long ago, I was privy to watching a design train-wreck from the
position of "developer" where I had no absolutely say in the matter. It was absolutely agonizing, so now I feel
the need to design again.
I consider design to be an act of visual engineering. Like any engineering problem there are constraints.
Design is not necessarily about making a pretty picture. I like making an application attractive. Who doesn't?
But being a good designer is about being able to throw away your favorite "pretty part" in order to achieve the job
objectives.
Consultation
Have an idea but don't know where to start? I can help you flesh-out your ideas and generate a
solid functional specification so you can shop around for a developer. Without a solid technical specification,
it's hard to avoid comparing apples and oranges when different development shops bid on your project.
I also perform experimental research and feasibility studies. Not sure if your idea will work in practice?
Let me bang on it for a while and I'll see if I can deliver you an answer.
The Crucible... uh, I mean Consultation
Before I even touch a keyboard, I will take your idea and drive home the logical
consequences of your requests in such arduous detail, that there is an excellent
chance that you will start to hate my guts.
I've seen agencies marginalize this process by referring to it with non-threatening
terms like: "requirements gathering". More accurately, this is the process of building your
business. Really. Your site won't even work without the hundreds of irritating
details I'm going to drag out of you.
But you only have to do it once.
Because it comes first, and because it's the most difficult part, and because agencies
typically assign this job to their weakest link, most places
bungle the all-important consultation phase like you wouldn't believe. The end result is a
often a collection of self-contradictory, irrelevant "requirements" reminiscent of a B- history
report from an 8th grader. Too much copy, not enough substance.
Bad requirements will only cause us to rebuild
repeatedly.
Then you're off the hook.
Once we've figured out what you want. Then I go see about making it.
Classes
I've also begun to provide short seminars on various programming topics close to my core skill-set.
Available courses include, but are probably not limited to:
- Beginning PHP and MySQL
- Modular Application Development with PhP and MySQL
- Web Foundations: HTML, CSS, Basic Javascript
- Fat Clients: a modern Javascript primer
- An Introduction to AJAX
- AJAX and the MVC Model
- HTML as its own Templating Engine
- Flash Remoting
- "Useless Middlemen of the IT Industry" or "Why you should probably assassinate your project manager."
Hollar if you're interested, and I'll set up a custom
curriculum to fit your audience. If you're looking for a specific topic not mentioned
here, or more information about one that is, please ask!
Technical mumbo-jumbo
Cavalcade of Technologies
I operate a full-service web development shop. My preferred platform is
LAMP (Linux, Apache, MySql, PhP), for reasons
of price, availability of collaborative programmers and hosting options.
Within PhP, I have experience
using most of the more popular modern libraries:
Zend,
Drupal,
Joomla,
Cake,
CodeIgniter,
Doctrine, and literally dozens of others. I pick
up new technologies very quickly, and I do it for laughs.
In the event that you are a boot-licking Microsoft lackey, I also have an extensive background building applications
in ASP.NET (preferably with C# because Visual Basic is for cavemen). If we are locked into a .NET environment, I would prefer
that we leverage ASP.NET MVC as it is easily the
least offensive of Microsoft's offerings. Entity Framework was and remains a hideous
travesty of an ORM, even in its fourth iteration, but I do have extensive experience working around its shortcomings.
I am an outstanding Front-End Engineer. I have an broad background in JavaScript both hand-written
and also utilziing modern libraries such as jQuery,
Prototype,
YUI and
Google Web Toolkit. JQuery is
my personal preference. I also have past experience with Adobe Flash and Silverlight, although the wind seems to be blowing
the other direction recently. (Yay for JavaScript!)
I can make a site work on IE 6, even if I
don't think it's a good idea to do so.
I know how to make and leverage semantically correct markup and to style it efficiently using CSS, and upcoming CSS3
techniques. I have also recently been delving into other forthcoming HTML 5 features specifically Canvas and SVG rendering.
Component Orthogonality
My overriding design principal is that no one component of your application should explicitly
depend on any other. In programming parlance, this is also known as "loosely-coupled". In short, you should
be able to swap out any important subsystem for a new one without rebuilding the entire application.
For example, you should be able to:
- Re-skin your web site with a new design.
- Swap out an HTML browser client for a Flash, Silverlight, iPhone or Android client
- Change your database platform from MySQL to SQL Server, or any other data store capable of serving your data
- Change your server-side processing platform from PhP to .NET, or Python, or JSP or vise versa
I know that some of these statements sound unlikely, but given the nature of modern web applications
and the advent of Ajax
and the REST api,
these things are reality right now. This is really what modern progamming is about. In an environment where technologies
change so frequently, your software needs to be flexible enough to use new toys as they become available.
Recent Work
Site Programming and Front-End Engineering
Services
Programming, Front-End Engineering
Technologies
ASP.NET MVC, jQuery, Google Site Search, HTML, CSS
The Envision Group
Physician Health Partners Web Site
The client is a local health care organization that went to one of my design
associates for a facelift on their public-facing web site. I was contacted
to lay down a solid application framework foundation in a .NET environment. The
initial site launch is simply a bunch of static pages, but the client has plans for more
elaborate functionality in the near future, so it was important to pick a framework
that would be able to handle as-yet undetermined future needs.
Given that the client already had an internal IT department comfortable managing a
.NET web site, I opted for ASP.NET MVC
as a base framework, as it is the least objectionable of the options currently
provided by Microsoft. Truthfully, the new ASP.NET MVC is a decent MVC library: easily
as good as the dozen PHP, Ruby and Python-based options that have been in existence
for 8 years or so.
The most challenging part about this job was the antiquated browser requirements.
Support for IE 6 was mandated, as well as functionality in the absence of javascript. Normally,
that's not such a big deal, but the design also required a variety of modern
web design elements such as rounded corners, multiple gradient backgrounds.
Between those requests and a couple design decisions that betrayed Envision's roots
as a primarily print-focused agency, it was actually a little tricky to deliver the markup.
Course Administration System (PhP)
Services
Application Programming and Architecture, Data Modeling, Front-End Engineering, Security Integration, WordPress Integration
Technologies
PHP, MySQL, jQuery, CodeIgniter, WordPress
The University of Colorado at Boulder, Department of Continuing Education
Course Administration System
Services included development of an administrative web site for the CU Continuing Education
online web catalog. I was called in to build an administrative back-end to accompany another
developer's front-end code.
Much of the project involved modeling a rather complex (and continually evolving) data set to
a MySQL database and developing an appropriate administrative platform and publishing system which could interact
with pre-existing front-end software. The client's understanding of the underlying data set underwent
multiple revisions as more and more business rules were uncovered. (Largely by me.) My role
was not only a development role, but I also served as a data architecture consultant and modeler, as the client
was moving from an archaic organizational structure that relied heavily on internal Excel sheets. The business
knowledge necessary to unify the client's internal data structure was spread across several individuals at
CU, and careful consensus-building was necessary to ensure that the final product would satisfy the many
parties who would come to rely on this data set.
Additional concerns included integration with CU's internal
security protocols, accessibility of the database from Microsoft Access, and collaborative interaction
with the front-end design team.
I employed a (now common) MVC paradigm using a heavily modified CodeIgniter
base framework and a home brew ORM as a data model.
Guest Lecture
Services
Two day college seminar.
Technologies
Ajax, jQuery, Basic HTML Markup, CSS
The University of Colorado at Boulder, Department of Computer Science
Guest Lecture: "Ajax, JavaScript and their impacts on user accessibility
in web 2.0 applications"
Recently I taught a two-day seminar at CU on the topic of accessibility in
Web 2.0 applications. With all the fun and the glitz of modern Ajax javascript-enabled
applications, it's easy to forget that haphazard usage of these technologies
can easily render a truly hideous experience for those members of the audience who
might be viewing your content from a screen reader.
Topics included basic javascript, methods of alerting a screen reader when
a page has changed, and general techniques for accessibility markup. The doctrine
of progressive enhancement was emphasized.
This was a really fun class, and I wish I'd had a couple more days to really
dive into the material.
Site Programming and Front-End Engineering
Services
Application Architecture and Programming, Rules-Engine Development, Front-End Engineering
Technologies
ASP.NET MVC, jQuery, Entity Framework, T-SQL
IntrinsiQ, Data Operations Department
Data Scrubbing Interface
IntrinsiQ is a company that has installed a series of data collection
devices inside oncology offices throughout the nation. They provide tools
which allow doctors to analyze trends in drug usage and effectiveness.
Part of their data interpretation involves having a knowledgeable oncology professional
examine raw data to determine when certain key events have occurred during a course of
treatment. Previously, these events were identified by having a user examine
raw data delivered as Excel spreadsheets!
The client requested that I implement an interface that would make the identification
of these points more clear. Furthermore, the belief was that if certain rules could be established
and codified, then a rules engine could be constructed which would use previously determined
criteria to evaluate anomalies automatically.
To that end, I built a jQuery-powered Ajax gant chart that lays out a patient's treatment record in
a draggable linear format, allowing the oncologist to note important events, and define important criteria so
that similar anomalies can be picked up in the future by an automated data processing robot. (That I also built.)
Guest Lecture
Services
Single day guest lecture.
Technologies
jQuery, HTML, CSS
Rocky Mountain College of Art + Design
Guest Lecture: "Fundamental Front-End Engineering Techniques"
This was a single day class introducing a group of student designers to some
of the realities of web production. I covered topics relating to semantic markup, specifically
with emphasis on separation of content from presentation. We used a sample web site that
the class had prepared as a group (a prior assignment) and pointed out things that would
need to be changed in order for it to be released into the wild.
Website Front-End Engineering
Services
Front-End Engineering
Technologies
jQuery, CSS, HTML
SchoolFunder.org
Front-End Engineering Project
This was a really simple production job. My goal was to render HTML and CSS in a clean,
modular, standards-compliant manner suitable for insertion in a Smarty-style templating
system by the primary developers.
The idea behind the site was kind of neat. It allowed for easy funding for kids
projects via a a simple micro-donation model. In particular, this site was to be focused
towards generating income for school programs. I believe the original site itself has been absorbed
into a less targeted funding application. Kind of a shame.
Sphere.com Redesign
Services
Design, Front-End Engineering
Technologies
PHP, Prototype.js, HTML, CSS
Sphere.com (Now owned by AOL)
Home Page Redesign and Ajax Search Engine Implementation
Sphere is in the business of indexing blogs and relating them to bonafide news. (Admittedly
the distinction is vague if you consider Fox to be a news source.) Sphere provides a way for you to
read what "some guy with a blog" has to say about events that they don't fully understand....
and quickly!
The goal here was to hilite Sphere's core capabilities in an interactive way. The base
purpose of Sphere's software is to make contextual connections between news stories and
blogs, so I created a drilldown tool that automated the process that the tool undergoes in
real-time via an AJAX drilldown search mechanism.
PHP Seminar
Services
Two day professional programming seminar.
Technologies
PhP
UCAR (University Corporation for Atmospheric Research)
Professional Seminar: "Beginning PhP Applications with MySQL"
This was a 16-hour PHP Seminar offered to employees of UCAR in Boulder.
The emphasis was on rudimentary application development including the basics
of user authentication and authorization, page construction and interactions with
a MySQL database.
In retrospect, I think UCAR was trying to cram a little too much content
into 16 hours. Some of the participants of this class had very little programming
experience and frankly, I think the raw amount of material was a bit too
much for them to absorb. We did manage to rush through a basic application
from scratch, which gave them a jumping off point for their own studies.
Questions you should be asking... but aren’t.
What are my responsibilities as a client?
Your job is to determine, in concrete terms, the things you wish the design to accomplish.
That's it. You don't need to start making technical desisions for me using buzzwords you
read about in Fast Company last week. I'll take care of the technical decisions after we've established
your goals.
You don't need to worry about which "Open Source Framework" or "Facebook-Style
Extensible API" we're going to eventually implement. You're just playing with fire if you try to
make those decisions too early. And unless you are an unusually saavy technical client, you're
playing with fire if you try to make those decisions at all.
You choose the goals, I find a way to accomplish those goals. It's that simple.
- Do not blur the line between your job and my job.
- Don't play with fire. I'm the guy with the oven mitts, not you.
- Do not form a design review committee until you have solidified your goals. Doing so will only create a clusterf@#k.
- Do not back-seat design or I will stop this car.
How do I know whether the design you've provided me is meeting my goals?
You evaluate it against your concrete goals, of course. We did establish those previously,
correct?
If you feel my efforts are not meeting your goals, tell me why in concrete terms.
If you can tell me why something isn't working, then I can fix it. If you can't, then we're going
to run around in circles until you can.
If you genuinely don't like the design, then just say so. There's nothing wrong with disliking
something I gave you. I'm happy to try again, because there is rarely only one way to achieve
your goals. But telling me the result is somehow not meeting your needs...
when it clearly is, is just going to result in me firing you as a client.
You don't need to look out for my feelings because this is business, and engineering,
not an art project.
Why did that first comp look so much better than the final product?
Because you decided to mess with it. You added your own little flair. Somebody convinced you
that adding more cooks to the kitchen would somehow make better spaghetti.
Way back in kindergarten, when you were playing with finger paints, some nice teacher
probably told you that art is subjective, and that everybody's opinion is equally valid. That's
a cute thing to say to a toddler.
Well now you're all grown-up so I can tell you the truth. My opinion about design implementation
is probably better than yours. This isn't art, this is visual engineering. There's definitely a component of personal
preference involved, but there's also a lot of cold, hard math that doesn't care about your opinion
or mine. Things are placed on the page for distinct reasons, and you don't get to put
your paws all over the blueprint unless you know what you're doing.
Frequently asked questions that you should really stop asking.
I believe I can safely speak for the entire professional design community
when I say that we never want to hear any of these questions again. Many of
them may not be willing to admit it to your face, but then again, they don't
chase the same kind of clients I do.
Can we make that logo bigger?
Yeah but I'm not going to. I sat here and played with the size of that logo for a good long time
until I settled on the size it's at. It's clearly visible. You know how I'm 100% sure of that? Because
it's the only thing you're talking about.
Furthermore, physical size is arguably the least important factor in determining the visibility
of an element.
Let's look at the real reason why you're asking me to make the logo bigger. You need to be able
to go back to your boss and tell him how you're contributing to the process. But the fact is, you have
no idea what to do, and asking for a "bigger logo" is all you can think of.
I want to save some time and/or money at the expense of your sanity. To that
end, I'm thinking about using my nephew's art project as our logo. Can you just put this logo right in
the middle of...
Read this now.
This material will be on the test.
The only thing worse than bad design is a good design that's been modified by an amateur.
You can no more "add in" somebody else's work into a design than you can "add in" a pound of
sawdust to chicken soup. It doesn't go there. It was designed with a different purpose, and there is
no relevant context connecting the two items.
You want to use your nephew's logo? Then have your nephew design the page as well.
If you want, you can call me after he jacks it up. At least it will be coherently
jacked-up because just one designer (your nephew) will have created all the pieces.
Isn't the client always right?
If the client knew what "right" entailed, they wouldn't have to hire a consultant. There are plenty
of other agencies out there that will tell you exactly what you want to hear... even if it's nonsense.
Drop me a line, if you think you’ve got the guts.
If after taking all that abuse, you still believe we're a good match.... then you're probably right.
I run a 100% bullshit-free operation, and I keep it that way by carefully
selecting whom I conduct business with. I would rather have 5 rational clients
than 50 airheads.
This site is my filter. If you can give and take straight talk, then we've got a bright future,
and I will build you amazing things.
inquiries@nerdinacan.com
(Solicitors will be destroyed.)
Iterative Development?
I've seen at least one other agency I've worked for sell "iterative development" as if
it's somehow a good thing. I'm not sure how rebuilding a site again and again is attractive.
It's more of your money, and it's more of me sitting in front of a computer screen.
Wouldn't you rather sit down and think through the process just once? Don't you think
that collectively, you and I possess the imagination necessary to consider all the most likely
pathways through your application before we build it? We don't need to be perfect, it just
needs to be basically correct.
If your actual business plans change, well... that happens. None of us can predict the future.
We adjust, rewrite as needed and move on. But to actually plan on doing a bad job? That's
just a justification for charging you more.
Failing to establish solid requirements will result in you paying more money.
It’s time for a chat with “The Bobs.”
What would you say...
you do here?
Ever been on the phone with your agency and you find yourself talking to a person
who says things like: "Let me check with the developer and get back to you",
or maybe "Hmm, I'm not sure, let's see what the art director says".
That person is called a "project manager", "middle man", and sometimes "parasite".
A Project Manager is a non-technical intermediary that an agency will
interpose between client and developer under the premise that it takes a 3rd party to
translate communications between the two. In no sense is a project manager ever managing
the project. That's actually a job better suited to the developer.
The project manager is actually managing you.
Let's play telephone!
Imagine playing telephone with 3 kids. That was a fun game right? Always a laugh-riot. Ok, this
time, instead of three adorable 8-year-olds, let's play it with the client, the project manager and the developer.
The only problem is, the project manager doesn't speak the developer's language. For purposes of this
little analogy, let's say he only speaks Korean.
And now... instead of playing for giggles, let's say we're playing for the contract fee of your
web site.
This game still sound fun to you?
Don't play telephone. Talk directly to the person who's going to build
your application. Give that person a chance to ask you relevant questions that will actually speed you
towards a completed product.
But, I'm a people person!
There is a widely-held myth in this industry that developers can not be people... people... persons,
whatever. Hey guess what? I figured out a little while back what makes a lot of client-type people happy:
functioning web sites.
It's true!
As it turns out, when asked, many clients are more interested in having their work completed
correctly than they are in having a hilarious happy-hour with the P.M. after that extraneous
2-hour production meeting. Go figure.
You ask somebody from a design agency what the purpose of a project manager is, and you'll
probably hear a colorful metaphor involving grease and wheels. Sadly, the Project Manager is only
necessary to smooth over situations that he, himself has created through his lack of technical competence.