That’s Hot Code. Code That Scales

In software development, you have to write awesome code!  Code that scales! Bottom line, I love developers that write wicked code that scales, that functions to perfection, and that looks “Hot”!  I just don’t understand people that think their super hero name would be “The Human Obfuscator”.

The Hot and Ugly of Software Development

You know the feeling of hot code!  It’s so easy to read, things just seem to flow together, you get into this state of happiness that all is good with the world?

Don’t you hate that feeling in your stomach when you open up code, and there are no comments, and it’s impossible to read, nothing seems to flow, you get into this state of crying and angriness!

I love asking white boarding programming questions in interviews, not so much because I want to make sure the guy can put together come code that will execute, but because I love seeing how pretty their code is.  I look for things like separation of code, is the developer putting related pieces together?

Someone Else Will Look at What You Developed

As developers, we often forget that chances are, someone besides you will be touching your code, and they will be lost reading it if your code is ugly.  You should always be thinking in the back of your mind “How can I make sure that people reading my code will say, “That’s Hot Code!”". 

See I think successful software developers view writing code more like an art form, than a science.  Sure there is a lot of science in software development, however, once science becomes so complex that it requires finesse to get it done, it becomes art.

Software Development Requires Comments

So much code out there is not commented at all.  During software development, it seems some developers don’t see the importance of it.  When I look at code, I would love a brief explanation of what you are trying to do, any code hacks you used that need to be cleaned up later, etc.  Adding a nice description to functions is awesome.  Adding smaller bits of comments when needed within the code itself is also awesomeness.  However, be careful not to go overboard and add to much detail!  Your code should use variables that make sense, should flow, etc.  However even the prettiest of code needs comments to make everything flow together nicely!

Comment your code as you go about development.  If it took you a few weeks to figure out an algorithm, or how you needed to make a certain recursive function flow, make sure you comment it for goodness sakes!  I can’t count the amount of times as a software consultant that I was reading other peoples code, and wasted days trying to figure out what they were doing, simply because they refused to take 2 minutes to add a few simple comments.

I’ve also run into the other side of this coin where some developer made it his life mission to over comment everything!  I’m talking every single line.  “What I’m doing here is going into a case condition.”, “This is and If statement.”, or how about “I’m going to assign 5 to the integer i.”.  I get it!  Reading through this kind of code also takes forever, as it becomes almost as annoying as using Microsoft Bob, or dealing with Clippy saying “It looks like your writing a letter!”.

Develop Readable and Well Formatted Code

Have you ever heard the argument that you save bandwidth by not spacing things out, not tabbing, and using small variable names?  Let me just save you trouble by telling you, do not hire anyone that believes this theory.  Machines are the best at saving bandwidth, if you are concerned with bandwidth and file size, run compiled or compressed code on your web sites.  People that write code like they are a human obfuscator perplex me. If you are out there and reading this, please explain your logic in the comments…

Make sure you use indentation and your margins correctly.  It’s nearly impossible to read code that has poor indentation, or none for that matter.  I mean sure it’s readable, but it cause massive migraines, and it’s just something that should not be dealt with if you are any kind of professional developer.

You know how in English glass the teacher explained how run on sentences were bad?  The same applies to programming.  Try and keep your lines no longer than 80 characters wide.

Also please make sure you use variable names that make sense! Booerns (This is a Simpson’s technical term) to using letters that mean nothing!  Be creative and come up with some nice variable names that make sense.  And don’t try and be the smart ass that creates variables that make the Great Wall of China seem like a tiny stretch.

Follow coding standards set forward in your organization.  What you don’t have coding standards?  Get some!  While you’re at it make sure you add in some casing and naming standards!

Separate Logic

New developers do this all the time, they will create functions like “submitOrder”, and place every piece of logic into the “submitOrder” function, from sending the order, to calculating totals for the order, and even figuring out the taxes on the order.  Instead, please do everyone a favor and create an “Ordering” class, and create functions like “getSalesItems” and “calculatePST” and “sendOrder”. 

You really have to make sure you separate out your logic whenever possible as it will make unit tests, later bug fixes, and re-usability much easier tasks to accomplish.  Even if you already have a huge function that does everything but flush the toilet, make sure you go back and re-factor the function.

Code Review

Probably the single best thing you can do to make sure your code is “Hot” is perform code reviews!  This will force you to want to write readable code that everyone will want to look at, instead of code that makes developers want to run away screaming. 

Final Thoughts

As you grow in your software development career, you will start to realize that very little time is spent writing new code, and a lot of your time will be spent looking at old code, and figuring out how to tweak it, and extend it.  Make it easier on yourself, and the other developers that will have to look at your code, by writing “Hot” code!

At the end of the day, “Hot Code” is readable, maintainable, less bug ridden, artistic, and scalable.

 

10 Software Quotes from 6 Titans of Software

Love them or hate them, these figures have changed, created, and re-booted the software industry we all live and breath in.  Bill made it profitable, Steve made it sexy, Larry gave us Larry, Google boys made it searchable, and Marc killed the desktop.  The one common denominator between all of these visionaries is extremely clear.  Passion! 

There is something to be learned from every one of them!

Bill Gates – Co-Founder and Chairman – Microsoft

Bill Gates

“The first rule of any technology used in a business is that automation applied to an efficient operation will magnify the efficiency. The second is that automation applied to an inefficient operation will magnify the inefficiency.”

“Measuring programming progress by lines of code is like measuring aircraft building progress by weight.”

www.microsoft.com

Steve Jobs – Co-Founder and CEO – Apple

Steve Jobs
  • “A lot of times, people don’t know what they want until you show it to them.”

  • “We made the buttons on the screen look so good you’ll want to lick them.”
  • www.apple.com

Larry Ellison – Founder and CEO – Oracle

Larry Ellison

“You have to act, and act now!”

 

“When you innovate, you’ve got to be prepared for everyone telling you you’re nuts. “

www.oracle.com

 

Larry Page – Co-Founder – Google

Larry Page

“We have a mantra: don’t be evil, which is to do the best things we know how for our users, for our customers, for everyone. So I think if we were known for that, it would be a wonderful thing.”

“If you have a product that’s really gaining a lot of usage, then it’s probably a good idea.”

www.google.com

Sergey Brin – Co-Founder – Google

Sergey Brin

“We believed we could build a better search. We had a simple idea, that not all pages are created equal. Some are more important.”

www.google.com

Marc Benioff – Founder and CEO – Salesforce.com

Marc Benioff

“Always pitch the bigger picture. Salesforce.com was about “the end of software,” not customer relationship management software or software as a service.”

www.salesforce.com

How To Kill Your To Do List, Developer Style!

Are you one of those people that creates to do list’s, action plans, project plans, and seems to have millions of things to do?  There is actually a simple “Hack” you can use today to get your life back on track.  I just finished reading David Allen’s book Getting Things Done: The Art of Stress-Free Productivity: Books: David Allen, and have taken some great ideas from the book!  I highly recommend reading it. Follow along with me on this journey to getting more stuff done than you ever imagined, developer style!

Set Yourself Up For Success

Before we start, the whole idea here is to process things fast!  If you can’t do something in two minutes, figure out what you will do with it.

Create 5 folders on your computer.  Inbox, Action Items, Incubate, Current Projects, Archive.  Create shortcuts to these folders on your desktop.  Get the same 5 folders in front of your desk in physical folders.

desktop folders

The Inbox Folder

The Inbox Folder is where you want to put things you haven’t processed yet.  What goes in here? New music you downloaded that you haven’t had a chance to put away, files you are sent from colleagues, software installations you’ve downloaded, random text clippings, bookmarks you want to keep track of and don’t know where to put them, meeting minutes, invoices to pay, etc. Your main goal for this folder is that at the end of the day, this folder is completely empty!

Action Folder

Anything that will take you more than two minutes to complete should go in here.  This could be files that you need to clean up, but can’t delete until you read them, HR forms that need to be processed, etc.

Incubate

Here you will put things that you might want to do at some point, but aren’t totally ready to do at the moment.  You can even create a file within the folder that says “The Incubation List”.  This is where you can write out anything you might want to do at some point, but are not getting to.  You will want to review this folder regularly.

Current Projects

These are current projects you are working on, live projects if you will.  On my computer I keep an expenses folder, a client projects folder with all the clients we have, a research folder for current research I am doing, and I keep some employee files in here as well that are current and pertinent.  The idea here is that you keep everything you could use in an instant on hand and readily available to you.

Archives

This folder is easy.  Once things in current projects are completed, we would move it to the Archives folder.  For example, you can keep Archived Clients, Achieved Projects, Resumes, etc in this folder.

Now Kill The To Do List

Now that you have setup your computer, and physical folders, you are ready to rock and roll!  This part is actually fun.

  1. Take every file that you have on your computer, important emails, anything lying around, and place it into your Inbox.  Do the same with papers that are lying around your office.
  2. One by one, go through each item and ask yourself if you can do something with it right away. 
  3. If you can, do it right away!  Then once you’re done, put it in Archives if you want to keep it around.  If not, dispose of it!
  4. If you need to delegate the item, send it to someone else and forget about it!
  5. If it’s something you need to do, but will take more time, put it into the Action folder!
  6. If it’s something you need to do, but want to do later, put it in the Incubate folder.
  7. If you don’t want to do anything with it, throw it out or delete it!

Every day, make sure you never end a day with your inbox full.  At the end of the week, move any competed projects in Current Projects to Archives.  Go through the Incubation folder and see if you want to take action on these items now.  At the end of the month, go through the Archives folder and delete things you won’t need anymore.

This process is discussed in detail in “Getting Things Done” which I highly recommend you read.  The book goes into much more detail of course, however this should be enough to get you started.

Quick Recap

Create these folders on your computer and desk:

Inbox –> Action –> Incubate –> Current Projects –> Archive

Follow the process:

Take Action Now –> Take Action Later –> Delegate –> Archive –> Incubate –> Delete / Trash

Review Process:

Daily –> Weekly –> Monthly

Follow these steps, and you will be on your way to destroying that to do list that you can’t seem to complete!

How To Finish A Big Software Project And Be The Hero

software development hero We’ve all been there! The huge beast software project that just won’t end/die. In fact Microsoft is constantly getting themselves into this trouble.  Vista, SQL Server, XP, all became these huge projects, that in the end, had to have massive features cut, and new leaders appointed to save the day and ship products!  At the end of the day, if you are constantly building and building, and never shipping, you’re sunk!  How do you get a big software project out of the water and become the software development hero?  I’ll tell you how…

First, a little history to how the big nasty project starts!  A huge software development project is dreamed up to solve some complex problem.  Great, that’s what software is all about!  But things start going bad right on day one!  How?Well, the managers and executives decide that they are going to plan every detail of the software project to the most minute detail.  They then assign a project manager to manage all the developers and let them start building each piece independently one-by-one.  A few weeks before shipping, the project managers try and combine everything, and all is well right?  Wrong… Disaster!  The project is delayed!  Days pass, weeks, months, years!  What the *beep* just happened here! What to do?

It’s Like Building A Building

Have you ever seen the construction of a building?  Does everyone go into their own little silos and build their own thing?  No!  How is a skyscraper built?  First lay the foundation, then put in floors, with the elevator shafts, then build floor after floor, then the interior, etc.  Could you imagine what would happen if every piece was built in a different site, and then later everything was dropped off at the construction site to be assembled?  Even if you had the best plan to assemble everything together, you would have problems!  Things wouldn’t fit and would have to be re-done, architects would change their minds, pieces would be missing, and the building would look like a bunch of match sticks!

Be The Software Hero, Finish That Project

Does your software project feel like a disaster waiting to happen?  Is it already a disaster?  Are you ready to get the software project on track?  Here we go…

  1. Source Control
    Do you have a source control system?  If you don’t, that is a major problem!  Get one ASAP.  Without source control you might as well go play Russian roulette.  You can’t rollback changes, you have no backups of your source code, you have no history, and it will be nearly impossible to set up proper continuous integration!
  2. Continuous Integration
    Do you have a continuous integration server setup?  You know how every time you check in code, and you get the build master to build your code, everything blows up?  That’s because he is only making builds when told, and this is probably not often, let alone every time someone checks in any code.  Continuous Integration will automatically build your project, and give you the results of the build.  You can even add Unit Tests, Coding Standards Tests, etc.  But let’s keep it simple to get you on track!
  3. Bug Tracking System
    Without a bug tracking system you have no way of knowing where the quality of your software stands easily.  At any time you should be able to see which features are being built, tested, approved, troublesome, etc.  If you are relying on excel lists or written notes, invest the money in a bug tracking system as soon as possible!
  4. Patching System
    I’m not going to get into installer issues here, but you need a patching system.  You do not want to deploy installs upon installs to your testers.
  5. Disable Untested Features
    Turn off every feature in your application that has not been completely bug tested and approved by your users.  If your project is in trouble, you have hundreds of features implemented at 80%, and you probably think they are at 90% – 95%, but they aren’t.
  6. List Major Features
    Make a list of all the major features that are involved in the software project.  Start at a very high level.  This is the key step to start turning around the project.  You are going to pick your battles here, small, winnable battles, instead of fighting a never ending battle with thousands of features.
  7. List Top 20% of Major Features
    Ok so you have a list of all the major features, now take 20% of the high level features and make another list of those.  These are the features that must be implemented for a great pre-release version of your software.
  8. Detail Out Top 20%
    For the 20% List, make another detailed list of every feature that needs to be implemented in order for these 20% items to be completed.  Rank these features by importance.  I like to choose the most complex ones first, and end with the easier ones.  This makes it easier to know if you are on track, as finishing easy features first, won’t really give you any indication as to how much longer you are going to take.
  9. Plan The Week
    Carefully figure out which of these features you can complete in the next week.  Assign out features to developers on the team.  When you assign them, try and keep similar features together.  Make sure everyone is checking in code regularly.  When they check in, if they break the build, they must fix their build immediately!
  10. Create Branch
    Using the source control system you chose, create a branch.  Your goal here is to create a branch, label it as the testing version, and then release a patch in the next step.  Next you start working on the items for the next week, while your testers test.
  11. Build Release for Testers
    Get your Build Master into high gear; have him build a patch for your internal quality assurance team. 
  12. Testers Take Flight
    Hopefully you have a Quality Assurance Team, if you don’t start with at least one person and get them setup with the Bug Tracking System.  Get them to get the patch as soon as it’s available, and get at the testing!  By the way, if you can include customers or end users in your quality assurance team, do it!  As soon as your testers find any bugs, issues with implementation of features, etc. make sure they report them to the developers!  If you have a good bug tracking system, the system should automatically email the developers when your testers give feedback or change the status of bugs.
  13. Software Developers Work on Trunk
    While your testers test, your developers keep working on next week’s items.  As bugs come up, they go back to the branch, resolve the issues, and go back to Trunk Development.
  14. Approve Patch
    Your testers have completed the testing?  Everything looks good?  AWESOME!  You have just completed your first set of features that are now ready to be installed!  Technically, if you have followed the procedures outlined above, a customer or client tester should be able to install this software, get the patch, and use it!
  15. Continue Steps 9 to 14
    Continue your efforts over and over until you get the 20% done, hopefully this is not as far away as you think!

Your goal is to focus on small features, get them done, and send out a release for testers.  This is a huge shift from trying to complete 100% of your bug ridden huge project.

Your team will be extremely motivated to be releasing workable software every week!  They will actually speed up, and the whole project will start gaining unbelievable momentum!

When testers find bugs, your developers will fix them faster because the code they wrote is fresh in their minds!  If features need to be tweaked and changed, it gets caught early, and changes are much more fluid!

Your business users will start seeing results!  They will in turn give you more resources, better tools, and more respect!  The shiny happy people will hold hands!

Is there a lot to do?  It depends in how much of a mess your development lifecycle is.  If you have nothing of the above setup, you are going to have a tough time, but if you focus and execute quickly, you should have no problem’s setting up the ideal environment quickly.

Enjoy being the Software Development Hero!

The One Minute Software Development Manager

Being a Software Development Manager is a great job, if you are the right person for the job.  You have to have a real passion for technology and leadership to excel in this role.  I have spent the better part of the last 5 years studying leadership and software development, and have really enjoyed the journey.  Below are some of the key things I try and focus on day to day as I interact with my team.  Hopefully some of these points can help you!

Set Clear Goals

Setting clear goals is a key role of a Software Development manager.  This means that just telling your team “Can you get project xyz done by Friday, thanks!” is not enough, in fact, it’s useless!  You need to be able to clearly define the goal, and then describe the goal to your team in beautiful clarity!  This is done both on paper, and in meetings for visualization of the goal.  The clearer you can make the goal to your team, the more likely they will be to achieve the goal, and surpass it!  Most goals are made up of mini-goals, or mini steps if you will.  Once you have clearly defined the goal, you need to be able to setup the game plan for the goal, filling in the steps to get the goal achieved.  Once your goal is defined in minute detail, you are set!

Lead By Example

There is nothing worse than working for a manager that barks orders all day long, and yet is never around when you need them.  If you expect your team to come in on time and be totally devoted to the job, projects, and goals at hand, you have to be the most on time, focused individual of the team.  If you expect your team to take amazing meeting minutes, keep meetings focused, and send awesome project status reports, then you need to ensure you are the best meeting minute taker on the team, creating action item reports, and detailed, easy to read, meeting minutes.  During crunch time in a project, you need to not only have people are willing to come in on weekends, and put in the extra effort, you need to be the main resource available during these times!  You need to practice what you preach, set examples, and share in all the hardships.  Nobody wants to work for a manager that just wants to revile in his teams accomplishments, without actually helping the accomplishment happen!

Set Clear Direction and Vision

As a leader in your organization, your main goal should be to set the vision for the team, and do it in a clear and concise way!  It’s not enough to simply send an email that says “Our vision is to create great bug free software fast!” that is pretty much useless.  What you need to do is make your team live, breath, and act the vision.  You need to be able to energize your team to follow the vision that you create, and have a clear roadmap on how each member of the team is helping the vision take shape.  You also need to be up to speed with the rest of company, and be ready to update the team vision when it’s necessary.  Especially in the current speed of the business world, you need to be ready to react, and move that ship in another direction when needed.

Motivate Your Team

Motivation is key.  Nobody wants to work for someone that does not motivate them.  But how do you motivate a team.  It is actually easier said than done.  Take interest in your team, learn about your team, involve them in decision making and make them feel special.  Listen to your team when they have something to say.  When they come to your door and want to talk, always make time for them.  Have a lot of energy, get your sleep, eat healthy, and exude energy at every meeting, and every interaction.  You need to connect with every person on your team in a different way.  See, different people are motivated by different things.  If you get to know them on a personal level, you will find out exactly what makes them tick, and how you can make them happy, and motivated.  The more your team is motivated, the higher the retention of the individuals, and the more they will be able to contribute to your organization.

Focus On What Is Important

One of the single most important things you can do as a Software Development Manager is focus on what is important.  There will be distractions coming at you and your team on a daily basis.  You need to have the ability to quickly and easily avoid these distractions and lead your team to the important tasks at hand.  Your team needs a beacon of light, a light house.  You are the lighthouse of the team.  Your team could be the most powerful, smart, energetic team on the planet, but if you are not focusing them on what is important, they will fail!  The effort that your team puts into the job is very important, but if they are putting all their time and effort into solving the wrong problem, or the wrong problem the right way, they are wasting their time!

Be the Most Positive Member of the Team

Negativity kills!  Both literally and scientifically!  Negative thoughts and emotions have been proven to cause your immune system to weaken, and a big contributor to disease and death.  Is it any shock that this same attitude in the work place slows down projects, and causes more bugs in software than are necessary!  There are certainly times when feedback and criticism needs to be given to projects and teams, however there is a right way and a wrong way to do this.  Think about this for a second:  Why are people drawn to leaders in the first place?  Because of their negativity?  No.  It is because of their ability to look at negativity and challenges straight on and be extremely positive, and able to find solutions.  Great leaders add life to projects through their positive attitudes, and make teams achieve things that other, even more experienced teams, could never dream of achieving.

Be Decisive and Action Oriented

In order to be a great Software Development Manager, you need to have the ability to think carefully, and make decisive decisions quickly.  You need to be able to take action and carry out the decisions you have made without looking back.  While you are taking action, you also should not have your blinders on, and should be able to ask for feedback every step of the way.  Should the feedback be negative, or not the result the wanted, you have to be quick to change direction if needed, and try a different approach.

Provide the Best Tools

Providing your team with the best tools available not only makes them more productive, and makes your team enjoy their jobs more by having cool toys, it also tells your team that you know their time is valuable!  It shows your team indirectly that you realize that their time is precious, and that they are great assets to the team that cannot be wasted.

Provide the Best Hardware

How long does it take your developers to build their applications, debug, and run multiple tools they run?  Do they have one monitor that they are forced to cram all of their applications on to, and switch between applications all the time to see what one has for output?  How much are you paying them, and how bored are they getting wasting their time with this?  Do everyone a favor, including the company you work for and make sure they have the best hardware you can buy.  Especially with the cost of hardware these days, there is no excuse to waist hours a week for no reason, to save a few hundred bucks.

Trust Your Team and Their Judgement

Everyone on your team has been selected for a reason.  If you are not able to trust them and their judgement, they should not be on your team.  The reason you hire people that are experts in certain areas is so that you can trust them, and because they are just that, experts in their area.  I’m not suggesting that you just let a new person run the show and trust them instantly that would definitely be a huge mistake.  But as a manager you should get to know your team really well over time, and be able to know who are your experts, which areas they are experts in, and when you can, or cannot trust their judgment. For example if you have a masterful DBA working for you, that has built thousands of database designs in his career, would you go sit by him and micro-manage him and tell him what to do, and where to add index’s and how you would like the database structured?  Of course not… So why do so many managers insist on micro-managing?

Be the Coach

I’ve always viewed myself as the coach of the team, and not a manager. You need to be able to find the right talent, and keep them interested.  As a coach you have to be ready to make the plays, and provide feedback on the last period of play!  What was done wrong, what was done right?  Get to the point quickly, give the feedback, make the changes, and try again if there were mistakes made.  If things are going well, still provide feedback and coaching!  You always want to be improving the team!  You want to try and get your team running to its fullest potential.

So there you have it! My One Minute Software Development Manager guide to running a Software Development team!  Good luck, and enjoy the journey!