Archive for April 2012

Searching for the Right Design

Posted April 27th, 2012

We’re making significant strides over here to improve our design process. And by design, we mean a lot of things: building a startup vision, creating the user interfaces, and presenting a beautiful look and feel for our clients.

My current work is primarily on a client project called TPG Marine Harbor Management System. Yes, long name, but the project boils down to helping barge servicers track their fleets and automate billing. Crazy stuff. I joined the project as the second developer, but I’ve since taken responsibility as the designer.

The way we’re doing design on TPG is this way: we figure out what problems we want to solve in the next several weeks, and we start designing solutions today. The challenge I’ve faced is knowing when I’ve completed a design task. Finishing design isn’t as clear-cut as completing implementation of a feature. Should I mock up every detail for the developer? Should I code all of the html/css and hand that over to the developer? And most importantly, am I done yet!?

I’ve come to realize that the most important aspect of design is CONFIDENCE. The ultimate question in my head is, am I confident in my approach to a solution? When confidence becomes the key to finishing a design, the less important details become, well, less important. No longer do I feel the need to write tons of html, css, and javascript to feel “done.” I write as much as it takes to feel confident. The design may appear half-baked, sometimes sloppy, and maybe even ugly. But that’s ok…because I’m not trying to perfect it yet, I’m just trying to convince myself that my approach will work.

Because we live in a world of scarce resources, we need to figure out what get’s us to completion the most efficiently. Here are some ways in which I’ve tackled finding confidence:

Wireframing

Wireframing seems to work well when an app is being built from scratch. It helps answer questions like, what content needs to exist? What actions can be taken? Who are the users? I haven’t used wireframing much since my project is far beyond the initial design phase.

Sketching

Sketching helps get design insights tangible quickly. Skteching can help you visualize a solution without committing much time. I’ve found that the ease of finding confidence or the lack thereof from a sketch depends on my level of experience with the project I’m on. The more experience I have, the better my intuition and thus  the more easily I can vet ideas in the sketching phase.

HTML / CSS / Javascript

Since my project has an existing codebase, I spend most of my design time working with these three tools. Using git, I checkout a design branch for each design task and start messing around, searching for what interface and interactions (clicking, entering data, etc.) give me confidence. For my last design task, I abruptly stopped working on my design and concluded I had confidence, long before the interface was polished and the interactions complete.  But that was OK, because I knew I could perfect everything after design is finished.

(For all Rails/Git folks out there, an extra tip: I will clone a second copy of my repository so that I can run two versions of my app, one for development and one for design. That way, I can see my design work in action in a browser window while implementing the design.)

 

The goal here of this design process is to think critically about designing solutions before implementing a solution. But it’s also to be lightweight as possible. Good developers on small teams don’t need to know every pixel of an interface. They need to know what the solution is. The deliverable from these design tasks is often nothing more than a series of implementation tasks for developers, a half-baked demo, and maybe some code to reference.

I would love to hear your thoughts on approaches to design. I’m sure the approaches will vary, given the needs of different clients, projects, and teams.

Will all my MidWest starters…please stand up

Posted April 19th, 2012

So, you may have heard that the Mayor held his State of the City address here at our Town earlier this week. There was a lot of tweeting, liking, recommending, linking, socializing, and hubbub about this. We flooded the streams there for a while, because if you are plugged into the indianapolis startup tribe you saw a steady trending of coverage on every medium. During the monitoring of this coverage on Twitter, at one point I laughed out loud at a local fellow member of the tech entrepreneur tribe’s tweet “Anyone hear when or where the state of the city address was? Can’t believe I haven’t seen anything about it.” Gotta love some good sarcasm. :-)

This got me to thinking about why this is such a big deal. Being a Townie, I am ecstatic anytime we get to show off what we have done, what we do, and what we are capable of doing, for obvious reasons, but mainly because I truly believe in our overall vision and goals. But, if I wasn’t a Townie, I am pretty sure I would have still been geeked by the symbolism of the event. Symbolism that embodies what DT is about, but is much, much bigger than us.

The story of our tribe, our way of thinking, almost feels like an underdog story…

…there we are, lowly tech geeks that don’t  quite fit in with mainstream thinking

…crazy dreamers, being laughed at, because of our childish aspirations for something different

…questioners of the status quo, being ridiculed because we don’t adhere the popular model of what a productive citizen is supposed to be.

…backwards YeeHaw MidWesterner’s that should be leaving the heavy lifting to the coasts

 

Events like this, show that we are geeks, and damn proud of it. We do dream, and dream big, because dreams are what inspire innovation and forward movement in every field…we have proven this time and time again. We couldn’t live without our unfading pursuit of something better than what we have been sold. And, though we respect, and are thankful what the Coasts have done for tech, entrepreneurship, and small business in general; our Mid West swagger is now a world-class force to be reckoned with.

 

So, again, even though we were honored to host it, I don’t think this event was specific to any one company. It was symbolizing a revolutionary rise in an entire culture, a new way of thinking, a tribe the has been, and will continue doing amazing things. We all should be proud of what we accomplished, and allow recognition like this to give validation to those crazy late nights, to that extra TDD effort that produced some bad ass code, to that one in a billion design that you had the balls to put out there even though it may have been laughed at, to the sweat blood and tears that we have all put into moving this engine we call the #IndyStartupScene forward.

 

Without the entire tribe’s collective efforts there would be no DT, no SpeakEasy, no IPO’s coming out of our proud city. So to all of my fellow starters out there, kudos to you, stand up, take a bow, and let’s keep this thing going!

 

Writing Tests First, Code Second, and TSA-Style Tests NEVER

Posted April 17th, 2012

Last week, David Heinemeier Hansson (creator of Ruby on Rails and partner at 37Signals) attacked a popular version of test-driven development: the TSA-style. The overarching characteristic of TSA-style test writing is failing to ask why a needless security check test warrants a breath of life in an airport app’s codebase. His main point is that tests aren’t free: they have a long-term maintenance cost like every other feature. And if tests aren’t free, then you better pay close attention to the tests you choose to write, because they’re costly.

At the heart of his blog post is a scorn for hard-lined test-driven development. And for the most part, I couldn’t agree more with him. But the part missing from his essay, and the part of TDD that most resonates with me, is that TDD drives good coding patterns.

When the going gets complicated, the complicated gets…tested

DHH’s last point was: “Don’t force yourself to test-first every controller, model, and view (my ratio is typically 20% test-first, 80% test-after).”

The idea of writing tests first, coding second comes from the idea that “if you can’t test it, then it’s not good code.” While this may not always hold true, I’ve found that this approach guides me as I write code.

When a feature gets complicated, it helps to write out what you expect to happen before firing away on all cylinders to implement it. And, in the world of startup-land where we don’t have bountiful time to write tons of Cucumber and Selenium tests, this is called writing a spec of unit tests.

When it comes to features with complicated requirements in Rails models, I almost always test first. This is not to say that those tests won’t change as I write code. In fact, once I have my basic tests written, I start implementing to get a feeling if the pattern proposed by my tests work or not. I spend time refactoring both my tests and code until I’m satisfied. This approach helps me break my models down into healthy, maintainable parts.

Even in writing javascript, the “test first, code second” paradigm plays a role. While I don’t write unit tests for javascript apps, I do try to write my code in such a way that it could be unit tested. That means delegating responsibility through the javascript app to ensure I can “isolate” expected behaviors (i.e. avoiding “spaghetti” javascript).

Where to draw the line

I think DHH nailed the hammer on the head: it’s easy to waste our time writing unimportant tests while leaving less time to test the critical, risky parts of our app. But in the process of doing so, he tried to refute what, to me, seems to be one of the most rational reasons for test-driven development: driving good programming patterns. I would encourage any new programmer to keep this in mind when valuing testing.

My First Month at DeveloperTown…

Posted April 9th, 2012

“You do what?”  That is usually the first question I hear when I try to explain to people what I do.

“Wait, you work in what?”  That is the most common question I get when I try to explain my office environment.

“That’s Awesome!”  That is usually the follow up response when I am finished explaining my job at DeveloperTown.

And that is exact reason why I started working at DeveloperTown a little more than a month ago.  It truly is an awesome place to work.

I graduated with a marketing degree, and like many people who are fresh out of college with a marketing degree, my options for what I could pursue were almost endless.  I could have done sales, communications, analysis and probably 10 other things with my degree, but fortunately enough I ended up working for a small robotics start up located in Indianapolis, IN.  For four years I honed my skills into what I really believe marketing should be about: developing a great product that meets real needs.

Digby at DeveloperTownWhen it was time for a change in jobs, I was fortunate enough end up at a place that has the same desire that I do: to build great products that meet real needs.  In my first month at DeveloperTown I have done more and learned more than I could have imagined.  Not only have I gotten involved with four different start ups helping shape their vision and product through design, but I have been given the opportunity to get my hands dirty and learn Ruby on Rails and Haml for building out the sites.

By no means do I claim to be a developer.  In fact, if any real developer looked at my code, I think they would vomit a little inside.  But the great thing about DeveloperTown is that everyone is open and willing to help you learn.  The one thing that I have learned is that everyone wants to help you out.  I just pop on over to another person’s house, knock on the door and am invited in.

I am excited about what the future holds.  I couldn’t imagine anything better than working in a start up that is helping build other start ups.  Plus, who doesn’t love to bring their dog to work.

Archives

 

Categories