Friday, November 13, 2009

My Mac Tools

I recently started over from scratch on a shiny new 15" macbook pro. What I didn't realize is how many tools I've accumulated on the old machine. While downloading 4 separate tools at once, I thought it would be a good time to track my favorites for posterity's sake (and to help my friend Tim who is in a similar scenario).

Adium - IM client of choice
Quicksilver - I have trouble interfacing with my mac without it
TweetDeck - My favorite twitter client
Things - My method for Getting Things Done
Isolator - Tool for improving focus
TextMate - Great lightweight editor
SpringSource Tool Suite - Great heavyweight editor
Tomcat - Java webserver
MySQL - Powerful open source database
Sequel - Very nice client for SQL
Skype - You know
JumpCut - Better copying tool
SuperDuper - Backups that work
Cyberduck - FTP, webDAV, Cloud Client
Dropbox - Ass kicking Cloud storage
iTerm - My preferred terminal client
Evernote - Quick note taking
VMWare Fusion - Better than Parallels IMHO

And that's about it. I'll try to update as I remember others, but these are the tools that I really missed in the first two days of using my new mac.

Wednesday, November 11, 2009

5 Reasons I Work at Pillar Technology

People
I've been aware of Pillar Technology for some time and I thought that they had some good people here and there, but I've been astounded by the amount of talent that I've had the pleasure of working with in my short time here. Up and down the organization I've met elite software developers, agile coaches, team leaders, and many others who excel at what they do. One of our .NET leaders informed me that his rate for recommending new hires is at about 8%. 92% of the candidates he interviews are not at the level needed to work for Pillar. If, like me, you want to elevate your career, go work with a team of people that you can learn from.

Process
I've contended for some time that Agile and Lean software development techniques will be more common than Waterfall within the next 5 years for some very simple reasons. Agile techniques result in working systems, with fewer defects, delivered faster, and with a lower total cost of ownership than the alternatives. We are already starting to see a backlash against some of the short term, cheap construction solutions that have proven time and again to be less efficient and more expensive than previously thought. As more and more companies begin adopting Agile as a cure to their failing projects, look for consulting companies like Pillar that are leaders in this space to grow exponentially.

Collaboration
In the first week of working at Pillar, I've had the pleasure of offering my ideas on where we could take this company to our CEO, COO, multiple VPs, my peers, my team, my wife, my kids, and everyone else who will listen.I was a part of no less than 4 meetings in the first week focused on taking our company to the next level. Ideas at Pillar are solicited, not criticized. True openness and collaboration in an organization is hard to come by, but it is crucial for long term, strategic growth.

Focus
The companies that have grown in this economy have shared a few traits. One of them is to know what you are good at, and you focus on taking that to market better than anyone else. Pillar is extremely good at applying elite software development teams using Agile methodologies, to solve problems. Everything that we do here in the next 10 years will be in line with that focus. Companies that attempt to react to every opportunity presented to them have historically diluted their talent and weakened their position in the market place.

No Boundaries
Applying the core capability referenced above to as broad a population as you can has been a pattern of success for organizations for well over a century. Nike didn't start out by thinking they could sell tennis shoes to a few high schools in Oregon. Microsoft was focused on delivering computers to every home in the world at a time when the market was really only medium or large businesses. Pillar is at a point where the company is transforming from a regional focus to a national focus and I have every confidence we'll be successful. Sit tight, it may not be that long until we're international.

Friday, October 30, 2009

Thank You QSI

About 6 years ago I began my first consulting assignment with the idea that I would bounce around from client to client, build my network, and begin to determine what type of company I wanted to work for. A strange thing happened however, I began to realize that my consulting company, Quick Solutions, was exactly the type of company that I wanted to work for. They valued people above all else and built a staff of passionate leaders in technology that I was proud to be a part of. They realized that software development is most successfully done with TEAMS and not individuals so they fostered a team culture that made me excited to go to work every day. They understood that our company should be built with a mentality of ownership and provided benefits that cultivated that mindset across the organization. For the past six years I have been extremely privileged to work at QSI and it is with a heavy heart that I announce my departure from this great organization.

All things change and eventually come to an end, but words are not capable of articulating how hard this decision has been. I hope all of my great friends at QSI know that they made this decision gut wrenching and I am only able to make it knowing that I will keep in touch and continue to work, drink beer, talk shop, or golf with them in the future. The number of people at QSI who have helped change and crystalize my views on software development are too many to list here, but I sincerely thank all of you for the career altering opportunity to work with you. We will always be bound by our shared hatred of Lotus Notes.

TK

Monday, October 12, 2009

OSGi Talks

I'll be presenting at the Central Ohio Java User's Group tomorrow, 10/13 on Modular Java with OSGi. This talk will be a discussion of why OSGi is needed with enough demo code and meat to leave the attendees ready to start exploring OSGi on their own.

I've also been fortunate enough to be selected to present a 1/2 day pre-compiler at Codemash on OSGi. This talk will quickly cover the gaps in Java that necessitate OSGi in addition to exploring, via hands on construction, the patterns and tools for successful OSGi adoption. We'll basically spend 3+ hours building an enterprise Java system with OSGi from scratch! I'm pumped and honored to be hosting the pre-compiler so please sign up if you want to get a 1/2 day submersion into building better Java applications that are more flexible, maintainable and testable than previously thought.

Saturday, August 22, 2009

Interviewing Tip #3 - Focus on Fundamentals

Apologies for the significant delay, but I wanted to pick up the interviewing tips to get at least two more topics off my chest before turning to other posts.

Jon Kruger is a coworker of mine and I'd clone him and staff 5 of him on every project if I could. Lately, I've been striving to understand what the qualities are in Jon and some other elite developers I've worked with that increase the velocity of the teams they work on. I'll expand more on the positive and negative characteristics of elite developers in later posts, but in regards to interviewing, one of the big things that I now focus on are fundamentals.

I was fortunate to have some good mentors early in my career who pushed me to truly understand the pros and cons of every possible solution. That drive lead me into study of object oriented programming, evolutionary design, and foundational principles of development like SOLID. Uncle Bob, Bertrand Meyer, Martin Fowler, and others instilled within me, if nothing else, enough questions to keep pushing to look at solutions from all angles. I'm far from being the authoritative source on which solution is "best", but I will always continue to ask questions to try to find pros and cons of different approaches.

I've at times let people slide in an interview without much pressure on their foundational knowledge, but no more. I could care less at this point if you know whether SQLException is a Checked or Runtime exception in Java. You better be able to talk through the tradeoffs of having it either way, though. I used to dismiss Bruce Eckel's suggestion of asking potential candidates "What's the object model of a chicken?". I have used it a number of times though and it's a great question to start probing how someone may decompose a business domain into OO concepts. If you get scheduled for an interview with me and you can't argue why you would or wouldn't favor composition over inheritance, then we're not ready to work together. I'm not naive enough to think that all interviewers are like me, but if you can talk at a foundational level on design tradeoffs, I can't imagine an interviewer not wanting to talk further with you or hire you the very same day.

Jon's post here is a great call to arms for software devs. If your interviewer focuses on the APIs of Silverlight or MVC, and not on the benefits or drawbacks of either solution, you need to question whether you are interviewing with the right company. Similarly, if you can't articulate a number of outstanding refactoring items from your last project, or openly debate the benefits and drawbacks of some design decision you made on that project, then you probably need to brush up more on the fundamentals of programming and design before you look at making a career change.

Monday, May 4, 2009

Interviewing Tip #2 - Don't be a Commodity

Never forget that the interview process is no different than any other sales process. You are selling your goods to the interviewer and trying to convince them that you are the best candidate for the job. If you read the last tip then you know that you are also a consumer in this process, looking for the best career opportunity. The selling goes both ways, but for now, we'll focus on what the interviewer is looking for in a candidate.

In these times, it's a given that there are a number of viable candidates. It is inevitable that many of the competition will adequately answer the technically focused questions that are thrown at you. The fact that you know Spring, NHibernate, Cucumber, or MVC does not separate you from the competition. Ok, well if you know Cucumber it probably does, but what are the odds that you'll get questioned about it? My point is that Java developers who know Spring and Hibernate are commodities. Candidates need to articulate the other, softer skills that they bring to the table because they stand out.

Separate yourself from the pack by showing your passion for software development. The fact that you are learning Erlang in your own time may not be applicable to my immediate project need, but it surely shows that you are honing your skills in your own time. Furthermore it shows that you are trying to get better at what you do and that you have some ability to learn independently. Employees like that are assets in any organization.

Covering the technologies used on your past projects doesn't have nearly as much impact as communicating how you stepped into the QA role on the project because there was a resource gap. Or how you were able to reduce the time spent in system testing by setting up a CI server to eliminate defects. Or how you worked over the weekend to fix an issue with the production system that had plagued the company for years. These instances tell a story that your technical responses never do.

Leadership, passion, independence, and drive are the factors that sway decision makers. Don't let yourself get continually attacked with technical questions. Answer them accurately and succinctly, but steer the interview towards the softer skills and show where you've gone beyond your role to ensure success on your projects. That is where you'll separate yourself from the commodity and win the job!

Thursday, April 30, 2009

Interviewing Tip #1 - Become the Interviewer

This economy blows. Let's be clear about that. Nationwide unemployment rose to nearly 9% in April and IT is not immune. I've had the first hand experience of letting people go who I would love to work with again and I cannot describe how painful that experience is. We've had a number of clients cut projects short, shelve them completely, or force a reduction in rates regardless of their contract. IT and consulting jobs specifically have become extremely competitive as a result.

This post (and some subsequent ones) will be targeted to anyone who is currently out of work or in a consulting role, interviewing for one of the precious few jobs out there. Please don't kid yourself, you will be one of many potential candidates who are vying for jobs and a lot of candidates are out of work and willing to come in at a lower salary/bill rate. Separating yourself from the masses is even more critical in this environment.

I have the unique position of sitting on both sides of the interview desk. I interview about 50 people per year and also compete as a candidate for some consulting engagements. I'm going to try to let people know mistakes that I, my consultants, or my candidates have made and areas where we've excelled.

Tip #1 - Become the Interviewer
As an interviewer, if I don't feel like I want to work with you, I probably won't hire you. More importantly, if I don't feel that you want to work with us, I definitely won't hire you. I've worked with people who have no passion to come in on a day to day basis and help me solve problems, and they are a huge anchor to our team's productivity. They create tension and animosity among teammates, they slow the overall velocity of our team down, and generally do more harm than good.

If you want to dispel that feeling in your interviewer, then you need to let them know that you are eager to work in the position in front of you. I end every interview by asking a candidate if I can answer any questions that they have. If the candidate has not asked any questions to that point and still has nothing to ask me, I'm pretty much assured that they have no real interest in building a career at our organization. They are looking to fill a monetary gap in their life and I have no interest in helping them out.

Conversely, if the candidate responds with questions about the team, the environment, the projects, the challenges, the organizational structure, the benefits, the strategic direction, the color of the walls, the quality of the seats, the use of Lotus Notes, etc... then I know that they have a genuine interest in working with QSI and they are doing their homework. Further, they obviously are looking at making an educated decision on their career and not just getting a job. The interview should always be bi-directional, don't just get peppered by the interviewer.

Also, please recognize that the astute interviewer will draw some conclusions about you based on the questions you are asking. Candidates need to focus on asking the questions that are most important and critical in determining whether they want to work on this project. If you are only asking me about money, vacation time, health benefits, and the like I am pretty confident that your deciding factor is strictly based on compensation. I personally get much more excited when I'm interviewing someone and they are asking about the team makeup, type of project, challenges, technologies in use, and opportunity for career growth. Just please, don't ask me about our use of Lotus Notes, I don't want to scare you away.

Wednesday, January 21, 2009

2009 Goals

My good friend Jeff tagged me to blog my goals for the year. I'm glad he gave me a little inspiration for this as my personal goals are something that's been floating around in my head for some time. With the exception of the first two they are in no order. Here they are, etched in the annals of the internet.

1.) Delight my wife
2.) Be a better father to my 2 girls
3.) Exceed the expectations of every customer I come in contact with
4.) Blog every other week
5.) Speak every quarter at a user group or conference
6.) Contribute to an open source project
7.) Hire 5 people smarter than myself (low barrier, I know)
8.) Exercise 3 times a week
9.) Read 12 books
10.) Brew 4 times