Confusing The Perfect With Progress

One thing that I constantly suffer from is letting the concept of perfection keep me from making progress on something. This happens not only in my software development but in my writing, my gardening, my golf game, almost everything. I have no idea how this came to be but it seems to be a pervasive element of my flawed character. I have found that it’s important to constantly focus on identifying when I’m trying to hard for the perfect. Progress, even negative progress, is almost always better than paralysis. I don’t seem to be alone in this characteristic. Take for example this post that is arguing, albeit in an extremely conflicted way, that the concept of Separation of Concerns in software development is useless because a perfect Separation of Concerns is impossible.

Anyone who says that a system must display perfect separation of concerns has either never written any large-scale software systems or is certifiable and can safely be ignored. The goal of writing software isn’t to produce perfect separation of concerns. That is only one of many possible means to get to the end result of long term maintainable software that produces some quantity of value. Writing any meaningful software without an eye on SoC results in a jumbled morass of unmaintainable and untestable crap. Does this mean that your HTML views should be completely dumb, devoid of logic? Of course not and no one with any real world experience would argue that. But if you don’t constantly strive to keep them as dumb as possible, you will end up with junk. It must be a constant focus, one that is in the forefront of every decision because if it is not, it is always easier to do what is wrong than what is right.

When I first read Atlas Shrugged, I was enthralled with the concept and philosophy behind the novel, that selfishness was inherently good and that every action should be judged based on one’s own self interest. Of course, I was 16 and frankly, the philosophy fit nicely into a 16 year old’s limited world view. As I got older, I began to realize that while acting in self interest as a general rule is good, taking it to the extremes that Objectivist philosophy did will result in a terribly narcissistic life.

The same thing happened when when I first discovered design patterns. Everything was a Factory. I loved Factories. Concrete Factories, Abstract Factories, Factory Factories, by God they were all fantastic. But slowly over time, I learned not every thing was a Factory and not every thing fit neatly into design patterns. But as a guiding rule, design patterns are good but it’s just as important to know when to not use one as it is to use one.

Separation of Concerns is the same. As an overall guiding principle, it is critically important. There are going to be times when ignoring it is in fact the right decision but those times are very few and far between and you better have a damn good reason for doing it. But not doing it because it’s never going to be possible to have a perfect separation isn’t one of those reasons.

Sabbatical Week 1 Retrospective and Week 2 Planning

Last week was the first planned week of my working sabbatical. The following items were on the weekly sprint list:

  • BrettBim.com in a showable state (DONE)
  • Blog post per day – 5 total (3 completed)
  • One story in rough draft (30% done)

I spent 3 solid days on the first item plus a little bit of the fourth day. I’m pleasantly surprised with the result. It’s better than I expected given my experience. There’s nothing spectacular from the code side of it but I learned a lot about UI work which is an area I’m lacking in. The last two items didn’t share quite that much success. The blog posts and story writing got ignored to some degree, especially over the first three days. I’m finding it’s hard to split focus across two drastically different domains like coding and writing. Once I put my head down on the website, I wanted to keep working on it, especially since it’s easier to see progress there.

I’m also finding that writing creatively is exhausting. I think I overreached significantly with that last bullet based on this as I could only spend 2 hours at a time before I was wiped out. I only did this a couple of days instead of 5-7 days and so, progress was minimal on the story. I can whip out a 600 word blog post in no time but building characters takes a lot out of me.

I also read 2 books, more than I’ve completed in probably the past 3 months. That was very satisfying. I used to be an avid reader and somewhere along the way, turned into an avid book buyer. Completing books is far more compelling than just buying them. This wasn’t on the sprint list but it’s a nice side effect.

For this week, I’m going to focus less on the results of the writing and more on the time spent doing it in an effort to build up my creative chops. On the technical side, I want to get a landing page up for the main website I’m working on this summer. If time permits, I’m going to get devise set up on the site as well. On the creative side, I’m going to stick with 5 blog posts this week. I’m also going to try and write for 20 pomodoros (about 10 hours) over the course of the week. I think this will be more achievable in the short term and will help me develop a basis for pushing into more completed work in the next few weeks.

Book Review – Roads by Larry McMurtry

I picked Roads – Driving America’s Great Highways up on a lark at the Wylie library on Tuesday and finished it Wednesday. Larry McMurtry is an excellent author and that transfers well from his more familiar fiction to this semi-travel book on driving the major roads of the United States. He starts off the book with an explanation of why he’s writing the book and the genesis for it. Many of the great American travel stories are about the backroads and their people, always the people, their lives and how they interact with the road. McMurtry has no interest in this and in fact expects to talk very little to people. His is more of a wanderlust, an exploration of the major arteries of the nation at the end of the 20th century, what those lifelines provide and mean to the country more as a whole and less at an individual level.

The book is arranged into chapters by the month in which the trip was taken, January, February (2), March, April, May, June (2), July, August and September. His pattern is to fly into a major city, pick up a rental car and take off. Many of the trips are planned ahead of time while others just have a beginning and an end with several options on getting from Point A to Point B. McMurtry isn’t concerned with lengthy trips and seems to average well over 700 miles a day when he’s on the road. Again, these are not leisure trips in the normal sense of the word, they are journeys to see and relate things seen along the major highways of America.

This would be a difficult book for most people to make interesting but McMurtry is so widely read and seems to have such an encyclopedic understanding of the authors of our country that he engages the reader by continually mentioning authors whose backgrounds or stories are based in the cities or states that McMurtry travels through. Many of the authors are long forgotten to most but McMurtry relates their literature as if he read them yesterday. This moves the book along, not as a series of roads that he is driving but a collection of authors that he has read and known, their strengths and weaknesses. Even when the authors aren’t related to the area in some way, McMurtry tightly intertwines them into the trip. Nelson Algren appears in the first chapter on I-35 from Duluth to Oklahoma City, “a valuable if flawed midwestern writer” by McMurtry’s own words, brought into the story based on a quote about where to eat.

He drives many roads that he is familiar with, in particular those coming from the East back to his home in Archer City. He lived in Washington, D.C. for an extended time and made the drive from there to Archer City many times. He chooses to mostly retrace that same route for the book, following the 66, the 81, the 40 and the 30 to get back home. His time in D.C. seems to have been both extremely positive and extremely negative. He opened a bookstore there with Marcia Carter and by all accounts was very successful for over 30 years. He talks about being fortunate to open the store in a period where the rare book market was starting to gain popularity, especially in a city of such history as D.C. But D.C. is also where he had heart surgery on December 2nd, 1991. He makes it very clear that he feels like he died personally and spiritually if not physically then. He left soon after and this trip for the book is one of the few times he’s returned since.

The chapter written in August is the most personal, detailing the roads of his youth around the ranch in Archer City where he grew up. In this chapter, we see what it was like to be a child growing up in rural Archer County, unnamed dirt roads as the main thoroughfares. He speaks matter-of-factly on the change from transportation as a half day adventure via horseback to the feeling of entitlement we experience today getting on a jet and traveling halfway around the country in 2 hours. This chapter is a personal examination, not just of his youth but of the changes that have occurred in transportation. He has written a book around the premise of driving 700 miles a day, seeing many things superficially. His father lived or worked on this ranch his whole life and saw one thing, the country, deeply and with meaning. Transportation is much the same. We hustle and bustle to get somewhere and then continue the hustle and bustle once we get there, never stopping to drink in what surrounds us. As he ages, McMurtry is beginning to see those changes clearly and with some nostalgia.

The final chapter goes from Seattle to Omaha and is one of the best. It’s a road that he hasn’t driven before. Most of his trips seem to end up gravitating back towards the plains. In that sense, this one is no different. Along the way, he finds the perfect road for those of us who love and appreciate the openness and stark beauty of the plans. His writing grows more introspective in this chapter and because the most of the book has lacked that, this chapter has a power to it that is fascinating.

This is a story of the major highways in America as they relate to McMurtry, the literature of the states and an examination of the meaning of those roads. If you appreciate a road trip, I think you’ll like this book.

Web Deployment Cage Fight – 2002 versus 2011

When I first started doing web development with Visual Studio 2005, it was pretty painful work. Not only was the development itself difficult in many ways (if I say “typed DataSet” and “bloodthirsty bedbugs”, which makes you cringe more?) but the deployment of sites was often a long, tedious manual process for a site of any size. I distinctly remember having to log into my hosting provider, upload a zip file or collection of files, manually unzip or move them around and then hope that everything and the stars were lined up properly. Microsoft tried to make things easier with the Publish technology from Visual Studio but that never worked particularly seamlessly, at least not in my limited experience. On top of all that, it required considerable discipline (and a kickass source control which I’m not sure existed) if you wanted to deploy certain changes but not others.

Take a quantum leap forward into 2011. Over the last 3.5 days, I built a website to serve as my central home on the web, a place where I can aggregate my work, writing and other activities easily. I built the site in Rails, used git for source control and when it came time to deploy the site, Heroku for the hosting. To deploy my site, I had to do to things: [sourcecode language=”bash”]heroku create[/sourcecode] and [sourcecode]git push heroku master[/sourcecode] When that was done, I had a live, working test site on the internet that I could test in multiple browsers, get feedback on, etc. When I was ready to redirect my current home on the web to the new one, all I had to do was add a custom domain and Zerigo DNS add-on at Heroku, update my nameservers and presto chango, the production site was up and running.

On top of that, because branches are so painless and easy in git, I can create a new branch, work on it, merge it with the master and update the site all from the command line of my laptop. The idea of having to log into a hosting provider to upload files suddenly feels like waterboarding. If you have a significant test suite, it’s a matter of having your tests pass and then just updating your production site. Obviously, as a site grows, it won’t be quite that easy but it’s not going to get that much harder either.

The smart folks at Heroku have removed some of the major obstacles to web development so we can focus more on writing the code now and less on the administrative agony. On top of all that, for small sites like mine, the cost is negligible or non-existent. Lots of things aren’t better in 2011 than they were in 2002 (the world’s going to end next year) but web deployment, if you choose the right tools, is infinitely better in a way that’s almost inexpressible.

The Working Sabbatical

Well, it must be official, I’ve told my parents. I’m effectively on a sabbatical, the nature of which hasn’t completely been defined but the purpose of which is to find something I can wake up every single morning and not hate. Perhaps the bar is set too low. Actually, the purpose is to expand my abilities in both code and words over the course of the next 4 months. The genesis of the sabbatical came about on a random Monday at the library when I realized that some day, if I continued on my current path, I was going to wake up having done nothing I really enjoyed for the large part of my working life.

This happened about 2 months ago and over the following 6 weeks, I formulated a plan for the exploration process of my future career(s). That plan is twofold. The first part of it is to concentrate on my writing. My writing has largely languished in recent years and certainly could be considered no better than sporadic. I am also getting back into writing fiction where “getting back” equates to the years since high school. For most of my life, people have told me that I was a good writer and somewhere along the way, it actually sunk in that maybe that was true. I don’t want to wake up one day and wonder what I might have been able to produce. I have always enjoyed writing but I have not been dedicated to my writing. I’m looking forward to developing that dedication and hopefully a sense of craft as well.

The second part of the plan is to dive deeply into Ruby and Rails by building an admittedly ambitious website to help me manage all my semi-illicit gambling pools from one location. I realized when I started learning Ruby and Rails that I had no interest in doing Microsoft development any more, at least not as the means of my living. That is not to say I won’t ever again. If I’m being honest, I’d give this little exploration process about a 20% chance of success so it’s not out of the question that I return to the corporate world. But for now, I’m diving deeper into the Ruby world starting with a website at BrettBim.com (which currently just redirects here) and following with the previously mentioned project. This is an ambitious undertaking but one that I’d really love to tackle for a variety of reasons, not the least of which is how much time it takes me every year managing my office pools. I want to build it in Ruby and Rails because the philosophy of that community seems to more closely mirror my own.

So I’m jobless. Though I prefer to call it self-employed, not that there is any chance of money coming in over the next month or so, it just sounds better. I’ll be posting here in some regularity I expect, including a weekly update on progress. I think there has to be some accountability even if it’s just to myself or it will be too easy to have the four months quickly disappear with little to show. So the published goals for this week are to have brettbim.com in showable state, a story completed in rough draft and a blog post per day written either here or on my sports blog, You Need More Sports. The anonymous Internet will be my product owner and I expect him (her?) to hold me accountable.

Those with long memories will remember that I’ve done this once. In late 2007, I quit a perfectly good job and took 2 months off. That was more of a true sabbatical with few plans other than to take 2 months off and then find a job. There is no job plan at the end of this tunnel. This is a journey of self-discovery and learning, one that I hope leads to an entirely different viewpoint if not career.

For those of you who have always said I was a good writer and/or a good developer, thanks. You said it enough that I began to believe it. I couldn’t have possibly had the courage to do this without that support. Of course, if this fails, it will be all your fault.