The Blog

Jan 27, 2007

Paving the New Road 

by Maxim Porges @ 1:03 PM | Link | Feedback (4)

I work almost non-stop; that's how it is when you're passionate about what you do. I can be eating dinner with my girlfriend, or mowing the lawn, or getting ready for bed, and you can be pretty sure I'm thinking about something work-related when I do it. As a result I don't blog much, but today I'm blogging about work, so it gets higher priority.

As of the end of last year, I was made Director of Software Architecture at CFI. Months of planning for partnered responsibility with a great mentor and friend changed to a fast-paced transition when that individual decided a life change was in order. It's a decision that we all support; no one can argue against somebody's happiness. We'll miss you, Paul; it won't be the same without you. I wish you and your family all the best.

Paul and I had plans to take the department in a new direction, with Paul leading the business end and me leading the technical arena. That plan still stands, but with another person bearing Paul's sizable piece of the puzzle. It's still a great plan, and Garrett can ably fill the role. It's early days, but I already have a great feeling about where things are headed.

People are always asking me if I know Tyler Durden what it's like to be a director. It feels the same as it did before. My convictions haven't changed. I still have great respect for the team, and clear focus on solving the challenges we're facing. There are less people to convince when I want to move on something, which is nice, although I'll miss Paul playing devil's advocate on my (sometimes hairbrained) schemes.

For the rest of the department, I hope that things feel the same for them, too - and if not, that they feel better. And if things don't feel better, I hope people know that I'm still approachable and open to any and all feedback. If nothing else, my ears are more open than they've ever been. Since I'm now more capable to effect change, I want to be a tool for the team to own their future and change the shape of things to come.

So, with all that said, what am I focused on as I look to the future of the department? Many things; probably more than I'll be able to do before I retire. But there are a few that come to mind immediately.

First item: better equipment and office conditions. We have something of a Wal-Mart philosophy at CFI, where the effort is placed on making the company profitable without flashy offices or other fluff. However, this often results in workspaces and equipment being treated as secondary priorities. It amazes me that we've got such huge investments in third party enterprise software (Oracle, Flex, Rational, etc.) and state-of-the-art hardware in our data center, but our managers have to fight tooth and nail to get memory for their developer's PCs, and most of the staff are working off of 17" monitors with around a 15" viewable area. We demand a lot from our people, and they should expect a lot in return.

Second item: clear career paths and well-defined job responsibilities. Having been with CFI for ten years, I've been through a number of promotions and position changes. Not all of them were pretty. As a staff member in IT, you know that there are a number of positions and a tiered hierarchy, but understanding how to get to the next level is a bit of a mystery. Sure, the people who work hard and take on responsibility get promoted (an attribute of the company I always speak of with pride), but there's no real definition of how to move up beyond the gut feeling of the individual manager. I'd like to see a more structured approach to advancement opportunities and compensation, and I know I'm not alone.

As for job responsibilities, the lines have been blurred an awful lot over the years. When I took over one of the software teams, it was clear that one job role was doing many of the things that other job roles were responsible for. Nobody could understand why, and (in most cases) everybody wanted their responsibilities back. As we look across the software teams, what's acceptable tends to be different, creating an uneven level of quality and opportunity for advancement depending on which team you sit on. We should set the expectations straight, and have a bar that everybody can measure themselves against.

Third item: more rewards for a job well done. I was just speaking yesterday with a team, and we all felt that there isn't enough fanfare when a project goes out or a deadline is met. Our teams operate in vacuums, with their own celebrations, when in reality it's a win for IT as a whole when any of the teams deliver. Not to mention, so many of our latest initiatives are joint efforts crossing team lines. We should be making everybody aware when something rolls out, and the recognition for a win should go beyond a pat on the back; many people work late hours and give up time with their families to see projects through. I'd like to see a variety of rewards on offer, from gift certificates to comp time to team outings.

There are other rewards, too. Our department doesn't send anywhere near enough people to industry conferences, something which detriments the growth of our in-house talent and the freshness of our ideas. In-house training is done as and when it can be, instead of being a required item on every manager's agenda for their teams, with a dedicated line item on the annual IT budget. We're not going to be able to get any better if we don't invest in our staff, and nobody can justify the lack of investment that we have today.

Fourth item: better alignment with the business's needs and objectives. We've been an order-taking entity for a long time, due to political positioning and sometimes (IMO) mismanagement of IT resources for unproven business ideas. This results in a lot of people wasting a lot of effort on meritless projects, while key strategic goals sit on the sidelines waiting for attention.

It goes without saying that corporate IT exists for two reasons: to (a) create efficiencies and automation (thus cutting costs) and (b) enable the business through technological innovation (increasing opportunity). There's no greater feeling than being part of a project that makes people's lives easier, or adds tens of millions of dollars to the company's bottom line. If we can align ourselves better with the business, and be a strategic partner instead of an order taker in every initiative that we're engaged in, not only will the business blossom, but the job satisfaction for the whole IT team will skyrocket.

Fifth item: quality. We have a dire need to improve the quality of our custom enterprise software. We've got some powerful applications that do pretty amazing things when you look at how they came together, but the maintainability and ease of change for those systems leaves a lot to be desired. In many cases, the pressure to get something done quickly transcends the imperative need to get it done properly, which does nothing but cause future headaches as our applications become monsters of frankenstein architecture. There's no reason why we can't have the best software in the industry; we have some amazing talent on staff and, as I mentioned earlier, we have great tools and technologies sitting in our data center. We've got to make software quality and passion for the product job one. We can find a way to do what's right while still delivering swift solutions to the business, and I'm happy to lead the attitude adjustment required to make that happen.

It sounds cliché, but it means a lot to have people believe in you enough to let you lead. As I step forward, I'm reminded of every role I've played in my career: a salesperson, a reservations agent, a customer service rep, a supervisor, a first-tier IT staffer, a developer, a technical lead, a development manager, a software architect - and now, a director. I'm still all of those things; they define me and my attitude to what I do every day, and shape every one of my decisions. With a lot of work and a little luck, I'm anticipating great things for our department and our company, and I'm honored to play my small part in it all.

Jan 4, 2007

Come for the Java. Stay for the Cocoa. 

by Maxim Porges @ 12:51 AM | Link | Feedback (0)

Some of you may remember this ad campaign that Apple ran a few years back as they were ramping up OS X.



See, I wasn't lying. Anyway, I originally came to the Mac for the audio editing/production, and stayed because OS X kicks ass. As far as coding goes, I did my fair share of web development and Java programming on the Mac for work related and personal stuff, but never really got in to OS X development.

Around June of 2006, I optimistically bought a book on Cocoa/Objective-C/XCode programming. I say "optimistically" since I rarely have time to do anything outside of work, other than stuff that relates to work that I didn't get to do during the work day. However, since I'm on vacation for two weeks (at home, doing nothing) I picked up the book and started to learn Objective-C and Cocoa.

I'm pretty excited about learning this stuff. I've always loved Java for the rich and varied APIs produced by the massive community behind it, but Cocoa is special in the sense that you have access to all the CoreXXX APIs that Apple creates. These APIs are the stuff of magic: video editing, image manipulation, audio programming, etc.

Not to mention Objective-C itself. While it's a bit of a strange beast, it's a very interesting mix between a compiled and dynamically typed language. You basically get to pick and choose when you want to be one or the other, which to me seems pretty flexible and puts a lot of power in the hands of the developer. So far, I learned the Objective-C basics in about an hour, and I've been doing basic coding to get me warmed up. I'm pretty excited about getting in to some of the other capabilities of the language that aren't in other OO languages like Java, such as the Protocols and the intricacies of the messaging system.

I've decided that my first app will be a Safari rip-off using WebKit, called iJustLearnedCocoa. I figured I'd start here so I can get some experience with the Cocoa frameworks and see just how easy/powerful they are for myself. After that's done, I think I'll get more adventurous and see if I can create a chroma-keying application for replacing a background color of a photo with another image. We had to consider doing something like this for a work project once, and it seemed nearly impossible with our technology platform. I'd like to see how easy it is to do with Cocoa, although I certainly have no interest in promoting this app in our workplace for reasons I won't go in to here.

Finally, the new developments for Mac development forthcoming in Leopard look simply awesome. Since I've been spoiled by Eclipse 3.2 for Java, XCode seems like a serious step backwards in terms of productivity, but from what I can see of the new tooling Apple is ramping up, a lot of this may be a non-issue when XCode 3 is released. I'm also especially pleased to see that Objective-C 2 will support language features more familiar to a Java programmer like myself, such as garbage collection.

Depending on how things go, I can honestly say that I'd love to be a Mac ISV one day. There is such a cool community behind OS X, and enough interest in small, targeted $5 - $99 software applications that it's feasible one could make a living off of such an exercise. Worst case, I'll have plenty of fun amusing myself, and should learn a new thing or two about software development that I can apply to my day job while I'm at it.

Interested in taking the plunge with me? I found this set of articles from Apple to be very useful. Their technical documentation is typicaly well-written and of excellent quality, and these documents are no exception.