Add to Technorati Favorites

March 23, 2008

Headed to the Web 2.0 Expo in San Francisco

imageThe Web 2.0 Expo is coming!  If you are in the San Francisco area the week of April 21st, 2008, make sure you ping me and come check out the Web 2.0 Expo.  The Web 2.0 expo is a combined conference and tradeshow.  Last year's event drew over 8,500 people.  This years event promises to be even bigger.

There are nine different tracks you can choose from in the conference including:

  • Strategy and Business Models
    Marketing and Community
    imageDesign and User Experience
    Fundamentals
    Development
    Focus on Mobile Web
    Focus on Web Operations
    Focus on Social Platforms
    Sponsored Sessions

What really sets this expo apart besides all the different tracks, is the level of interaction you can have with everyone at the event.  It also has vendors and companies from all different platforms, which makes this conference so appealing.

You can check out all the speakers, join the facebook group, join the crowdvine, and download the Web 2.0 Expo San Francisco Brochure.

Conference Speakers I Will Not Miss!

Marc Andreessen - A Conversation

Multi-millionaire software engineer and Silicon Valley "whiz kid" entrepreneur best known as co-author of Mosaic, the first widely-used web browser, and co-founder of Netscape Communications Corporation. He was the chair of Opsware, a software company he founded originally as Loudcloud, when it was acquired by Hewlett-Packard. He is also a cofounder of Ning, a company which provides a platform for social-networking websites.

Max Levchin - A Conversation

Max is the visionary behind Slide, the largest social software company in the world. He is also renowned as the co-founder of PayPal, an expert in combating online fraud and one of the hardest working entrepreneurs in Silicon Valley. Before starting Slide, he incubated several other start-ups, including Yelp, where he currently sits as Chairman of the Board. Max started PayPal in 1998, immediately after graduating from college, and sold it four years later to eBay for more than $1.5 billion at the age of 26. Originally from Kiev, Ukraine (then part of the Soviet Union), Max moved to Chicago at the age of 16 and later received his Bachelor of Science degree in Computer Science from the University of Illinois at Urbana-Champaign. Max sits on the board of several other companies and trains for triathlons when he’s not obsessing over Slide’s business.

Rob Bagby - Building a Microsoft RIA from the ground up

A Developer Evangelist for Microsoft. Rob works with customers, as well as delivers presentations at numerous regional and national conferences, to illustrate how to take advantage of Microsoft’s developer technologies to deliver performance and secure applications faster. Rob bases his discussions on over 10 years of consulting experience, along with a Masters Degree in International Business from Thunderbird.

Mitchell Baker - Opening the mobile Web

Chairman of the Mozilla Foundation and Chairman and former Chief Executive Officer of the Mozilla Corporation, a subsidiary of the Mozilla Foundation that coordinates development of the open source Mozilla Internet applications, including the Mozilla Firefox web browser and the Mozilla Thunderbird email client. Trained as a lawyer, Baker coordinates business and policy issues and sits on both the Mozilla Foundation Board of Directors and the Mozilla Corporation Board of Directors. In 2005, Time magazine included her in its annual list of the 100 most influential people in the world and she has been affectionately given the title of "Chief Lizard Wrangler" at the Mozilla Corporation.

Dan Lyons aka Fake Steve Jobs

Dan Lyons is a senior editor at Forbes and the author of the The Secret Diary of Steve Jobs. In the persona of Fake Steve he authored “Options: The Secret Life of Steve Jobs,” a novel. He has published two previous works of fiction, a novel and a collection of short stories. Dan joined Forbes in 1998 and before that wrote for various computer trade publications including CRN and VARBUSINESS. He’s been a journalist for 25 years and has a master’s degree in fine arts from the University of Michigan in Ann Arbor.

Tim O'Reilly - O`Reilly Radar

Tim O’Reilly is the founder and CEO of O’Reilly Media, Inc., thought by many to be the best computer book publisher in the world. O’Reilly Media also publishes online through the O’Reilly Network and hosts conferences on technology topics, including the O’Reilly Open Source Convention, the O’Reilly Emerging Technology Conference, and the Web 2.0 Conference. Tim’s blog, the O’Reilly Radar “watches the alpha geeks” to determine emerging technology trends, and serves as a platform for advocacy about issues of importance to the technical community. Tim is on the boards of MySQL, CollabNet, Safari Books Online, Wesabe, and ValuesOfN, and is a partner in O’Reilly AlphaTech Ventures.

John Allspaw

John has worked in systems operations for over ten years in biotech, government and online media. He started out tuning parallel clusters running vehicle crash simulations for the U.S. government, and then moved on to the Internet in 1997. He built the backing infrastructures at Salon.com, InfoWorld.com, Friendster.com and Flickr.com, where he currently manages the Operations Engineering group.

Ari Balogh - Yahoo! and Open Platforms

Aristotle “Ari” Balogh is currently Chief Technology Officer at Yahoo!. He is responsible for company-wide product development which includes optimizing resources, speeding innovation, and ensuring the quality of Yahoo!’s products and services. He is focused on establishing a common architecture and building blocks to drive development aligned with corporate strategy and on improving the overall effectiveness of Yahoo!’s engineering efforts. All of Yahoo!’s engineering functions, including technical operations, infrastructure, and internal IT support groups, report into Balogh.

Blaine Cook - Building the Real-time Web

Blaine Cook is the Architect at Twitter. He is currently building and maintaining Twitter’s Jabber-based real-time backend infrastructure that tracks and distributes millions of updates every day to users on the Web, instant messaging, and SMS.

 techweb Network image

 

Technorati Tags: ,

February 18, 2008

Technical Transformational Leadership

What kind of leadership do you follow with your team? How do you present yourself within your organization?

Technical Transformation Leadership is kind of the word I've coined for myself which explains the type of leadership I try and follow on a daily basis.  It’s merger of two styles of leadership that I have found work extremely well within a software development and technical organization. It creates a really collaborative fun environment were everyone clearly understands the goals and objectives of the long term vision, and work extremely hard to achieve it.

Technical Transformational Leadership
Figure 1 - Technical Transformational Leadership involves taking your vision and cause to every level within the organization, making others successful, and your vision a reality.

Technical leadership is not taught in business schools, and you will not learn the skills to be a technical leader in an MBA program.  Transformational leadership is one of those things that you either follow very well naturally, or try and force and do a bad job executing it.

It takes a great deal of practice to be a Technical Transformation Leader.  On the one hand, you need to have experienced the software development lifecycle from end to end in order to convey your vision all the way down to very details.  On the other hand, you need to be able to disengage yourself enough to allow your stars to shine.  I akin this to Martial Arts, where you would learn how to "fight", and hopefully, never have to fight.

As a leader, your goal should be to set the stage for people around you to be empowered to shine, and show off their skills. As a leader, you want to find the best people, and let them perform amazingly!

Spend Time with Technology

Being a Technical Transformation Leader means spending 4 to 6 hours a day, every day, after work hours, keeping up to speed with the latest blogs, learning the latest technologies, trying out the latest API's, downloading the latest frameworks and samples.  It’s a ton of fun if that is what you enjoy! The worst part, at the end of the week, you still feel like you are missing a huge piece of the pie, which you are because as a leader, you hardly get the time to apply your knowledge directly.

I am lucky in that I love technology and everything surrounding it. In fact, I am pretty much obsessed with it. I have over 600 RSS Feeds I try and keep up with, all sorted into various categories. I try and keep my pulse on what’s going on with the web, and try and focus on technology when possible that makes the web possible. Whenever I read something on a blog, or find a cool new web 2.0 application, I always try and categorize it in my mind. What business value does it bring? How many people will want to use this? Does it use a new technology or concept? Does it scale? How does it work? Can it be done better?

I also download any new piece of code I can get my hands on, watch all the latest recorded events I can possibly cram, and create some pretty cool sample applications mashing as many cool technologies I possibly can together.

Spend time with technology, as much as you possibly can! The key is it has to be something you do naturally, and that you enjoy obsessively. Although my wife tries to keep me in balance as much as possible. I am lucky in that regard she is extremely supportive and attended my last .net User Group presentation on Silverlight!

Communication is Vital at all Levels

Everyone will tell you that communication is vital in leadership and they are not mistaken, mind you communication can mean different things depending on the job you do.  In the software development world, it means being able to communicate with varying degrees of detail depending on the audience, but at the same time, carry the same message all the way through.  This means you are able to easily convey the details of the project upwards, and at the same time convey the message downwards with more detail.

A great technical transformational leader can easily explain a status report to an executive team and get them motivated and become part of the cause! At the same time, the leader must be able to take business requirements, challenges, new product ideas, and convey them down to the software developers and architects.  The same individual that presents status updates, sits in executive meetings, is the same person that can white board out a database design and create an architecture for a multi-tiered web application.

Being a Transformational Leader

This is where the transformational leadership kicks in.  The same individual that can create an amazing database design isn’t necessarily doing it.  He might jump in and lead by example when needed, but the technical transformational leader must be able to set the stage to allow his chosen database designers to shine and create something magical. It really is an art form, especially since if you are truly solid on the technically, your first instinct when something goes wrong, or something technically challenging comes up, is to solve the problem quickly, and instantly if possible.

Transformational leadership is a key ingredient in managing teams of technically talented people. Instead of micromanaging and leading with transaction based leadership, you are leading by elevating and mobilizing your team. Your goal is to inspire members on your team and “evangelizing” to them. It all sounds crazy to some, but in the end, you will have a team that is performing at their potential, and achieving 10 times more than a team that is micromanaged.

Be the Best Motivator, Live With Passion

Lastly in order to be a great Technical Transformational Leader, you have to be a great motivator.  But being a great motivator isn’t just about having one or two rally meetings to pump up the troops, it’s about living and breathing motivation on a daily basis.  Pick the developer that seems the least engaged, and take them out for coffee; ask them what's going on.  You'll be surprised by the answer.  Motivate them, paint a picture of the future for them, and remove the road blocks they might have told you about.  During the SCRUM meetings, you can motivate by solving technical problems, or leading people in the right direction for a solution.  There is no better motivator to a team of highly intelligent people than to have their leader solve a difficult problem, and allow them to keep working and meet timelines.

And of course, you do have to have passion in everything you do.  Have you heard the advice of "Smile when you talk to someone on the phone.  Your smile can be heard".  Well, passion simply cannot be faked.  If you have passion for your job, what you are doing, it will shine through.

 

November 01, 2007

What Makes Version 1.0 Software Hard

I'm always puzzled by how hard software can be to write the first version of any software product.  Software in itself is always hard, for more reasons than I can write in a blog entry. But what makes Version 1.0 so hard?  I'll give you a hint, most of it has nothing to do with your developers. It has more to do with the process of innovation.

The reality is that most things that are version 1.0 are usually not built correctly.  But with software, you truly feel the pain when it’s built wrong.  Instantly.  Other examples would be new models of vehicles.  They usually always have massive recalls.  Where there is innovation, there is usually a bug (or several thousand).  There is no way around it.  As much as you may test the software package for months, years, and longer, with your quality team, there is no replacing real life testing.

In some cases you may ship great 1.0 software, but is the software shipping on time?

Version 1.0 Software Means Innovation

If you are writing 1.0 software, you are creating something that has never been done before.  You are innovating!  This is was makes software the best industry to be in (I think).  If it is something that has been done before, stop reading this article, go buy the product that already did it, and use that.  Customize it, and feel happy that someone else has gone through the pain of 1.0.  If your thinking, well there is something else out there, but I don't like it, well then, you are still in the Innovation phase, and you will still be climbing Everest because someone else failed at building software that you feel is awesome.  You will be innovating!

Version 1.0 Software Means Trial and Error

As much as every other developer or company that comes to visit your office tells you "If we use AGILE/CMMI/[fill in methodology of the week here] we will deliver on time what you want.", don't believe them.  While this is true in a sense, I akin this to the reality of getting that car you want at the price you agree to before signing all the fine print that nobody ever reads from front to back.

The problem is that while all these methodologies are great, there is simply no way to give a date to when software will be ready.  Did Thomas Edison give a date to when he would discover the light bulb?  Did the Wright Brothers tell the world the date they would build the first airplane?  Yes I'm exaggerating a bit here, but I hope you see my point.  What is my point?

There is no way you can give a ship date on version 1.0 software.

I don't care how much up front analysis you do, feature driven development, vision scopeing, etc you do.  There is simply no way you can do this.  Why?  because at the end of the day, what is Version 1.0 software?  What should it be?

Version 1.0 Software is software that works as the user expected it to work.

So let’s say you follow Agile for example, and you deliver new versions every week to your users.  You do everything right, you work in small iterations, and keep building on top of the last version.  You have totally scoped out each feature, each use case, each actor, etc. etc.  You should be rocking right?  Wrong.  Why?  Think about where you are getting your information from.  Your users.  Your user interface team and business analysts are thinking it through and deciding on how to provide the information to the software architects, to be given to the developers.

As development starts, and as new versions come out, users start realizing there are problems.  Project stakeholders realize that, "Oh, that is terrible, that's not what we want.", so things start to change, and there goes your project timeline.  Sure you can tell your users, we will put that in version 1.1, or version 1.5 or whatever, but the reality is, if certain features are left out that are needed, and if things don't function the way that you want them to, are you really delivering the 1.0 software that works like the users expected it to work?  Will the users be thrilled?  Probably not.

In Closing

Version 1.0 software is all about dreaming!  It's about creating something that has never been created before!  It's about having fun, innovating new methods and process's.  It's about setting goals for yourself, and trying to surpass them.  Unfortunately, as in life, sometimes you may meet your target date, sometimes you will be late, and sometimes you may be early.  Even if you lay out the best plans, you can't control the independent variables.  That is what makes life so exciting, and that is what makes software so thrilling to create.

September 01, 2007

Software Developers Guide to Managing Your Boss

Manage Your Boss

Learn to Manage Your Boss and be Successful

The most important thing to your software development career is the ability to create great code right?  Wrong.  Although this is important, one of the single most important things to your career is your ability to manage your boss.  The relationship you have with your boss is critical to your success, and how far you will go at the company you're at.  Possessing the skills required to "Manage Your Boss" can put you further ahead than anyone else at your company, and in your role within the software development lifecycle.

Raises, promotions, training, books, expense accounts, travel, are all dictated mostly by your boss.  Make sure you have the proper skills to manage your software development boss!

5 Things you can do next week to improve your career!

This article will focus on 5 key areas that you can take to improve your career and quality of life by managing your boss better.  Managing your boss you say?  Yes, that's right, your boss also needs you to manage them.  Do this well and you will get the raise you wanted, the new position you deserve, and be much happier at work.  We will focus on:

  1. Managing your boss's time
  2. Keeping your boss in the loop
  3. Promoting yourself and your projects
  4. Getting others to promote you
  5. Never bring up problems without solutions

Manage Your Boss's Time

Although a good software development manager will always make you feel like you are number one, the reality is the software development manager has a hundred things going on at any given time.  If you are having an issue, get it dealt with fast, however do not act as if it is the number 1 issue for the entire company, when the reality might be its only 2% of your boss's concerns.

What does this mean?  Simply, if you have an issue that needs to be addressed, and it is a simple issue, do your homework before taking up a lot of their time.  Clearly find what the problem is, what options can be taken to resolve the problem, and your suggested approach.  Make sure not to appear scatterbrained and confused when you approach your boss.  Make it clear, and keep it to the point.

Complex Issues Require Meetings

If you have a relatively complex problem that needs more time than just a 5 minute conversation, book some time in his or her calendar.  A follow up email also works really well explaining "I have booked xxx meeting for xxxx date.  I would like to discuss xxx.  Below are my notes on the topic.  Looking forward to meeting with you.".

By following this approach, you are not just barging in and taking up 20 minutes, and possibly side tracking something more important, or worse, making something important get brushed off because they had something else already booked.  Sending the email with the details of the meeting (which should also go in the meeting request), enables the manager to review the reason for the meeting, and move the meeting up closer if they see it as critical.

Keep Your Boss in the Loop

Most software developers hate creating status reports.  This is really unfortunate as it is one of the best times to keep your boss in the loop, and inform them of your achievements.  One of the constant fears that flows through the minds of any software development manager is that there employees are falling behind, making mistakes, and not letting anyone know.

In order to manage this "fear", software development managers will tend to nitpick and ask questions at times on certain tasks.  This is done to gain more information, as well as see how quickly and efficiently the questions are answered.  An employee that is able to answer questions bang on, and to the point, is looked at as competent, and on track.  No further questioning is needed.  If an employee asks for questions to be clarified, answers in round about ways, and is unsure of himself and his answers, is seen as incompetent, and requires further follow up and micromanagement.

Another way to avoid the questioning and making yourself seem on the ball, is to send in fantastic status reports!  Those status reports are your boss's direct link into what accomplishments, and failures occurred for you during the week.  Take this time to be honest.  If things are slipping on the timeline, let your boss know, make suggestions to improve the time line.  If you are on track and made some great new technical innovations, show off, and tell the world what you have achieved!

What Does Your Billboard Advertisement Read

If you were a casino on the Las Vegas Strip, and you had a giant billboard, what would that giant billboard on the strip say to attract people to come to your casino over everyone else's?  Sometimes I ask this question in an interview to poll a few things from the candidates. Do they know what they bring to the table, what makes them different?

This is actually a very important point.  What does your manager see you as?  Your Software Development Boss has so many different things to worry about, you need to make sure that when he thinks of you, he thinks of "Your Billboard".  What makes you, you?  Are you the AJAX wizard?  Are you the relational database master?  Are you the walking dictionary when it comes to c#?

Be Your Own Marketing Machine

One of the most important things you can do to move ahead in your career is to be your own marketing machine.  Market yourself to your team and your boss!  Pick an area that you will be the expert in, and become the expert!  Let people know you are the expert!  Create lunch and learns, send out emails with ideas and articles from the Internet.  There are roles for everyone at your company, pick your focus, and shine bright!

Market your Tasks and Projects

Just like a good book has chapters, your career's "chapters" are your projects and assignments.  Make sure you have clear title for every chapter, and explain each project or assignment clearly.  Make sure that at every status report you report clearly on your projects, and clearly explain how your "area of expertise" assisted in pushing the task/project further.

Get Others to Promote You

Software Developers hardly ever thing of the things I am talking about, so stay with me here!  Another thing you must be extremely good at is to get other people that are around your boss, to like you, love you, and see your value.  Ideally if you have created a clear message as to who you are, and how you bring value to the company, your next step is to get your Software Development Manager's friends and meeting buddies to also value you and see you as "The Database Design Genius" for example.

For example, let's say you are the quality assurance team leader.  During your lunch breaks, and meetings, make sure you are always stressing quality issues.  Who has tested it, how many bugs are left, have we provided the correct amount of customer training.  When you are meeting with financial people such as the CFO or his team members, stress how quality is critical to the business, and explain your background.  

Explain how much happier your clients where that all orders are shipping on time now due to 99.9% availability of the new software!  Talk to the VP of Manufacturing and explain how the new QA standards you put in place should be helping the production line produce better products, and ask them for new ideas and input!

Never Bring up Problems without Solutions

I love the movie Madagascar, I don't know if you've seen it, but it's great!  My niece always loves to watch it whenever she comes over.  One of my favorite parts of the movie is when the penguins are trying to dig their way to China, and instead, only dig their way to another part of the Zoo.  The "Boss Penguin" says "Don't give me problems, give me solutions!".

Software Development Managers hate when people come to them with problems, and don't provide options for solutions.  You are hired to solve problems, and come up with solutions.  If you see a problem, take time to come up with possible solutions!  They could totally be wrong, but just make sure that you have put some thought into some possible solutions!  At the very least it gets discussion going, and helps you learn how to solve problems.  The more you do this, the better your proposed solutions will get, to the point where your possible solutions will start being correct!

A good exercise is to write out the problem, think of three possible solution, write down the pro's and con's to each solution, and then pick the one that you think might work, and list why.  If you just start doing this, you might be totally off with all your solutions, but as you continue to go through this process with your manager, you will start to learn how he comes up with the correct solutions.  One day you will be able to walk in there, and all three solutions will be great, and the one you picked will be the greatest solution!  What a feeling that will give you!

In Closing

A career in Software Development is, in my opinion, one of the best career choices you can make!  You get the ability to be a programmer, manager, mentor, team leader, architect, and even a self promoting marketing manager!  I hope the tips above help you propel your already successful career to the next level!

 

August 29, 2007

Speed Up Your Software Development in 10 Steps

Speed Up Software Development

While many of you are great software developers, you can always use a boost in speed!  Here are some tips that I try and instill in my software development team.

Learn the Keyboard Shortcuts

The mouse was one of the greatest inventions to come out of Palo Alto, however, it has made some of us a little too dependent on this great little invention.  How many times are you moving it around to find the file menu, or the tools menu, then moving along to find something else?  All this time can be saved by using the keyboard shortcuts.  Depending on your development environment, you should really make an effort to learn to do everything with your keyboard.

One way to do this, is set aside an hour when you will only use the keyboard to do your development.  This means no mouse movements or help from your little friend at all.  If you can train yourself to use your keyboard for most things and your mouse less, you will become extremely fast at development, and will be labeled the keyboard cowboy at your office.

Remove Unnecessary Dependencies

As your software expands and grows, the build process will start taking longer and longer. This will start affecting your productivity by making you sit there and wait for things to finish.  A large part of this process is caused by dependencies that are not needed.  Make sure you clean them up.  There are a lot of great tools to help you with this process, suggesting and guiding you along the way. 

Make sure you research these tools, but at the end of the day, just make sure you keep things clean on your own.  By removing these unwanted and unused dependencies, you will notice a huge improvement in speed of build, and even the overall software application.

Setup a Continuous Integration Build Environment

This tip will speed up your development time astonishingly!  One of the areas that always takes the longest is the code integration between different pieces of code, and different developers.  Software developers go and develop some great pieces of the software, time comes to put out a new version of the software, or a patch, and everyone scrambles to give the build master their new code files. 

Poor build master tries the build, and everything fails.  The software development team then spends the rest of their time for a week making sure everything works well together, and compiles.  Then come all the bugs, and it’s just a bad situation all around.  Setup a continuous integration build environment and enjoy the process of builds!

Put Source Control in Place

Source control is extremely important to any project, without it, you are going to develop slowly.  Period.  I've talked about this before, because it is extremely important.  It's the foundation to your project.  Even if you are coding a small project, make sure it's in source control.  Source Control will enable you to have a history, a journal, of you project. 

Let’s say at some point someone wanted to roll back a certain screen to a previous design, or worse yet, a huge bug was found with the current version.  What do you do?  Well if you don't have source control, you are in big trouble.

Write Unit Tests

By adding test cases to your software development, you will speed yourself up by not allowing things to be changed.  In a future article I will explain the best way to create these unit tests, but here are some of the basics for those of you that have heard about unit tests, but haven't had time to implement them into your software development lifecycle. 

There are a few common types of unit tests you will want to start with: Validation, Bad Input, and Code Path unit tests.  The main idea here is you will be writing these automates tests, that will run every time you check in new code, thanks to our source control and automated build environment combination we setup in the previous steps.

Remember the golden rules: If it’s broken, fix it!  If it passed, and it still broke, create the unit test.  If it’s hard to write the unit test, make your code easier to work with. If you need to do setup before executing the test, do not copy paste from the application.

Use Code Coverage Tools

Code coverage tools are fantastic and go hand in hand with unit tests.  If you want to know how much code your tests really exercise, or want to ensure that the outsourced code is tested, code coverage tools are for you.  Code coverage tools will allow you to understand what parts of your application are well tested and what is not tested.  Some of the best tools out there not only measure line coverage, but also measure branch & statement, and methods.

Become One with the Debugger

Becoming a debugger master will really speed things up for you.  I'm not going to spend a lot of time on this as its very basic, but it is far to important to not mention.  Learn all the basic and advanced features that are available to you in your debugger. Breakpoints, Watches, and Stepping will save you countless amounts of time.

Write Reusable Code

When you are writing code, don't just write code for the problem at hand.  Write code for thinking about the future! Create classes, and put things together into reusable custom frameworks and libraries.  How to write reusable code is another article, however just make sure that each of your classes or methods does one thing.  Try and reduce the coupling in your code.  Lastly, make sure you are always thinking "modular".

Take Advantage of Frameworks

There are hundreds of thousands of frameworks out there for you to use.  Pick one that suites your needs, and use it.  The main reason for the creation of software development frameworks is to allow software developers to focus on the software requirements, and less time on the low level details.  There are a slew of excellent frameworks out there, pick the area you need, select a framework, and you are off to the races.

Ensure Proper Testing and Quality Control

Do you have bug tracking software?  Do you have a process that works for finding bugs, reporting user issues, logging all feature enhancements?  If you don't, chances are you will be spending a lot of your time trying to keep track of all of these times.  Set yourself up for success.  Invest in some great bug tracking software.  Some of my favorites are Joel Spolsky's FogBugz, and Axosoft OnTime.

I love tools, and over the next few weeks I will start sharing with you some of the tools that we use to make our developers fly through the software development lifecycle.  Stay tuned.

 

August 17, 2007

How To Win Friends and Make Developers Happy

Happy Software Developers 

They Should Jump Out Of Bed Every Morning!

How to win friends and make software developers happy!  Sounds simple, however, as most of you will know, managing software developers is tricky business.  Making them happy day to day is even harder. I would strongly advise that anyone managing software developers should be a developer first.  It is true that just because you are a great software developer doesn't mean you should be promoted to a manager. However, I strongly feel that if you have not been in the trenches, on death march projects, or simply do not understand the developer’s mentality inside out, you will be at a loss when trying to figure out this "special" bunch of people.

I'll try and take this from where my other post, The One Minute Software Development Manager left off because I had a lot more to say, and didn't want to lose anyone in my boorishness.

I will try and touch on just a few areas you should always think about when you work with developers on a day to day basis.  The goal?  Make them jump out of bed, excited to get to work to solve problems!

Your Attitude

Managers that want to be mangers to boss people around, give orders, or think that if you make them a manager, they will suddenly be looked up to by people in the organization and team, are probably the worst managers you could ever have!  This is the wrong attitude!  You should never, never, never promote someone to a manager that craves the title, or the responsibility. Just look at what happens in the history books to people that craved power, and were given power. 

The Right Attitude

So what is the right attitude to have?  Managers should be facilitators of the development process.  If you hire a new manager, make sure they absolutely love software development, and understand software developers.  If you are promoting people from within, my preferred method, take software developers that are natural leaders, that have the team already looking up to them.  Take developers that have been doing development for years, and want to get more done by leading a team, and growing that team to succeed!

So, make sure you have the right attitude, be a 360 degree leader, and everyone will want to follow you.  People should want to be on your team because you are an awesome leader, motivator, and coordinator, not because you are a manager.

Challenging Problems

Software Developers want to work on challenging problems.  They love solving things!  They love puzzles, riddles, quizzes, new approaches to solutions.  If you make the mistake of assigning your developers non challenging problems, or worse, no problems to solve at all, you will see some extremely unhappy developers.  Getting developers to write documents, answer help desk calls, and create project timeliness is a crime punishable by death of your team.

At this point you’re thinking, well, I need status reports, and I need someone to answer the phones.  Again the finesse factor comes into play. Let’s try some examples shall we:

Scenario A:

"Hi Sean, I need you to answer some help desk calls for the week, we are totally swamped."

Scenario B:

"Hi Sean, I have noticed an increase in help desk call volumes, and the help desk does not seem to be finding any patterns or rhyme or reason as to why.  I'd love it if you could take help desk calls next week, to help me find patterns and ultimately come up with a solution to why the spike in volumes!"

Which scenario is the right one?  B of course!  And you will probably get your software developer to solve some serious problems that sometimes get lost in the QA process through miscommunication from the help desk.

Micro Management

This is the deadly sin if you are trying to manage software developers.  If you start to use this tactic at any point, watch out, you will lose developers like the plague has infested you team.  The second you fall into this trap you are instantly questioning their ability, and their skills.  You have just managed to demotivate your team in the worst way you possibly could.

Project Delayed?

If a project is delayed, or a system is not functioning to spec, you can count on your software development team to be more freaked out about it, than you are probably.  The absolute best thing you can do is show them you are confident in their ability, and let them solve the problem. At the same time you obviously need to stay on top of the situation, and ensure that they are on the right path to solving the problem.  This is where prior programming experience is vital if you are going to be a great software development manager. 

You Must Have Software Experience

An experienced software developer will have that "blink" instinct to know if his team is on the right path, or the wrong one.  He will be in sync with his team when problems arise, knowing quickly if they are approaching the problem correctly, and will have it resolved shortly.  An experienced manager, with no software development experience, will be freaking out at the first sign of a problem with an application, because they simply do not know what is truly going on, and feel helpless as a team of developers is trying to solve a problem.  They will cause havoc, stressing out the developers, and ultimately causing them to make silly mistakes.

Trust Your Team

Showing your team you are confident in them, while at the same time staying on top of the situation and making sure that Titanic is not going to hit an iceberg requires some serious finesse, and software development experience.

Think about this for a second.  When you hire a software developer, or even a graphics designer, or a video producer, why do you hire them?  You hire them so you can have someone that is highly skilled (hopefully if you have done your job) focus on an area and exceed your expectations for the job!  Does it really make any sense for you to tell them what to do at a micro management level?  If you answer yes, it does make sense, then you have hired the wrong person.

Meetings

I hate to break this to you, but software developers view meetings as a complete waste of time.  Software developers are much more real time when it comes to things, and if you are sticking with Agile, you shouldn't really have your developers in a whole lot of meetings.  Developers live by e-mail. They can easily review their emails, make sure things are complete, and move on.  Should an email come in that is far too complex to figure out without asking more questions, they will then go and ask the sender for more direction (at least if they are awesome developers).

Conduct Short Meetings

Stick to keeping your meetings as short as possible, and if at all possible, just have SCRUM meetings at the end of the day and that's it.  Any time you have a few developers in a room to meet on something is seriously unhappy time for a developer.  The reason being they instantly start calculating things like:  How many lines of code could I have written already,  How many people are in this meeting that are not needed, How many man hours are we loosing per week in meetings. 

Run Efficient Meetings, Don't Waist Their Time

I am by no means saying meetings are useless, but make sure they are action oriented, to the point, and do not involve a lot of people.  For example if you have 15 people in a meeting, and you only need 1 person at a time for 5 minutes at a time, do everyone a favor and just go to that person, then the next, and so forth.

At the end of the day, your team leaders can withstand more meetings than the software developers because they are trying to work on their management skills and executive skills, but your software developers want to program and solve problems!  Let them.

Teach Them New Things... Feed Their Brains

You don't necessarily have to be the one teaching, but it would help if they had a mentor to look up to and learn new skills from.  If there is nobody in your organization setup as a mentor, create them, or feed their brains other ways! Let them buy any book they want, take classes they want, and take any certification exams they want.  Let your developers work on the latest platforms and give them the latest tools to learn their trade better!  The more you have your developers learning, the happier you will make them!  Let’s try another scenario:

Scenario A:

You have the best working conditions, nice office, great compensation package, free lunches and dinners.  Breakfast is waiting for your developers every morning.  However, they are all working on Visual Studio 6.0, with no add-ins, and developing on Windows 98 computers.

Scenario B:

You have your developers working in a basement, no windows, terrible compensation package, no free food at all, and no health benefits whatsoever.  However you give them Dual Core machines with 4GB of Ram, triple 22Inch LCD Panels, and have them developing AJAX applications, creating Web Services, learning ASP.net 3.0, PHP, Java, Web 2.0, XML.

Which one of these scenarios do you think a software developer would rather work in?  B of course!  Now sure I painted an extreme picture to make a point, but it’s true, and constantly forgotten!

Build Software That Matters

Something Steve Jobs has always done phenomenally well, is created a cause, and a purpose in his software development teams, and the companies he has managed.  People want to change the world; people want to do things that matter!  Being significant is a human need that we all need to fulfil! 

Create A Cause

If you create a cause in your team to want to be bigger than themselves, you will not only have amazing software, and probably do things that no other team can do, you will also have some of the happiest, motivated developers around working on your team!

Don't expect to keep a developer around if all you have him doing is crystal reports, adding in new functions into programs that are 5 years old, and updating ancient stored procedures.

Highly Used Software

Get them to write software that will increase sales of the entire organization, and help the company grow and donate even more money to a local charity.  Get them creating new software interfaces that will make using your software easier, faster, and more efficient, helping the order entry team go home earlier on the weekends! Get them to build software that will get used by thousands of people, not by five users!

Help Them Find Their Passion

At the end of the day, when the dust settles, developers are on a journey to find themselves, to find out what they like doing best, and excelling at it.  Will they be a Software Architect, a Lead Developer, an Executive Vice-President, or a Business Analyst?  Will they choose Windows, database, or web programming?

If you can help your software developers find their passion, what they are truly made to do, you will be rewarded by having some of the happiest developers around.  You will also make friends with some of the c00l3st people you will ever meet!

The Conclusion?  It's a Two Way Street!

I love working with software developers!  I give them as much respect, advice, leadership, responsibility, and personal time I can possibly give them.  They in turn, love working on our team and love getting up every morning.  Together we achieve some pretty awesome stuff! 

Going through both sides in the last 12 years, from help desk to pay for school, software developer, consultant, software development manager, to Vice President of Technology, I have definitely see both sides! I've had to do my fair share of firing and dealing with lazy programmers that think they are the second coming.  I just plain don't accept that on my team, and honestly, neither do the other team members.  Nearly every member on my team scores extremely high in my 15 point, How to Rate a Software Developer, but is at the same time humble, compassionate, and caring.

If I had a flat tire, ran out of gas, or any other emergency, they would come help a the drop of a hat, and they would treat each other the same way.  When review time comes, they know how their reviews will go before we even do them.  In a competitive market, assuming you have the best developers, and assuming they treat you fabulously and with respect, you need to follow these rules, period.  The days of Laissez Faire leadership and Transactional leadership are over.  You need to be Transformational.

 

Add Us

  • Add to Technorati Favorites
    Add Miguel Carrasco's Feedburner

    Add Miguel Carrasco to Google

    Subscribe to MyMSN

    Subscribe to MyYahoo!

    Subscribe to Bloglines

    Subscribe to Newsgator

    Subscribe to Feedster

    Subscribe to NewsIsFree

Great Sites