Rob Kraft's Software Development Blog

Software Development Insights

In home wireless cameras for less than $100

Posted by robkraft on August 7, 2011

I’ve been researching cameras that I can use to view my house while I am away. I purchased a TrendNet SecurView Camera model # TV-IP110W for $75 on the Internet and I am pleased with the results.  Before you purchase a camera you decide which features you want and which features you can live without.  Some cameras claim to have a lot of features, but some of those features may not work as you expected.
The TrendNet camera delivers these features well:

  • Wireless
  • Good quality images
  • Motion detector
  • Remote viewing
  • Inexpensive
  • Easy to set up, for someone familiar with wireless routers

What follows is my in-depth review of things to consider when you plan to purchase a wireless camera.

Setting up the camera for remote monitoring

To monitor the image on your camera while you are aware from home you need a connection to the Internet from your home.  Most homes today connect to the Internet with a high speed connection such as a cable-modem or DSL, but if your home does not have a high speed internet connection that you are willing to leave turned on while you are aware, then you will not be able to view the camera remotely.  I used to turn off all electronics in my house prior to going on vacation, but now I must leave my cable modem and wireless router turned on in order to view the camera.
You must configure your wireless router at home to allow connections to the camera from the Internet.  When you do this, you need to make sure that it is done securely so that you don’t expose all the computers in your home to hackers on the Internet.  The safest option, depending on the camera model, is to tell the wireless router to use a DMZ and to route all traffic from the Internet (specifically all traffic on Port 80) to the IP address of the camera.
This also means that you should probably use a static IP address for your camera because if you rely on the normal default DHCP assigned IP address, the camera’s IP address might change making the IP Address configured in the DMZ of your wireless router incorrect (or worse, pointing at a real computer in your house).
Furthermore, my Internet access does not include a dedicated IP address.  This means that the unique number assigned to my home that allows me to connect to the Internet changes occasionally, perhaps once a month or once a year, but I don’t know when it will happen.  This IP address (like 72.17.100.1) is also the number I must provide when I am away from my home in order to connect to my home camera.  If the number changes while I am away, I need to know the new number in order to keep monitoring the camera.  Your high speed Internet Access provider is unlikely to let you know when your IP address changes, but you can take steps to eliminate this problem on your own.  Sign up for one of the free dynamic DNS providers such as dyndns.com.  You will be able to create an alias name (like mycamera.dyndns-ipaddr.com) that maps to your IP address (like 72.17.100.1) and then you can connect to your camera by using the alias name (mycamera.dyndns-ipaddr.com) instead of the IP Address (72.17.100.1).  Some cameras support specific dynamic DNS providers in the camera software, so get your dynamic DNS from a provider the camera supports.  If that is not an option, then the last piece of this puzzle is to install an update client on one of your home PCs that recognizes when your home IP address (72.17.100.1) changes and notifies your dynamic DNS provider that the alias needs to point to the new IP address (72.34.251.18) instead of the old.  Some people, especially small businesses, may have a static IP address available that can be assigned to the camera eliminating the hassles of setting up a dynamic DNS entry.
Most wireless cameras will work with the 4 major wireless security configurations (none, WEP, WPA, and WPA2).  You need to make sure the camera you obtain works with the wireless network you have configured in your home (and hopefully that is WPA2).  You will need to know how to provide the SSID, keys and other information necessary for your wireless camera to connect to your wireless network.
Sometime in the future, your IPV4 Internet connection that currently gives you an IP Address like 72.34.25.18 will be replaced by a newer standard called IPV6 and devices that only work on IPV4 will no longer work.  This is likely at least 5 years away, but if your camera supports IPV6 now that is a bonus.
In summary:

  • Your home must have a cable modem, DSL, or other high speed connection and it must be turned on while you are away.  A dial-up modem will not work.
  • When using a wireless camera, you will need to leave your wireless router at home turned on.
  • You must configure your wireless router to allow access to the camera, but don’t allow access from the Internet to any other computers in  the home.
  • You need to have signed up for a dynamic DNS service.
  • You probably need to leave a computer turned on to manage your dynamic DNS IP address.
  • You should test connecting to your camera when you are away from your house prior to your desire to use it.  Often you will find that you can connect to and monitor the camera easily when you are at home, but not so easily when you are away from home.
  • Get a camera that supports IPV6.
  • Make sure the camera supports your wireless network.

Monitoring your camera.

To monitor your camera when you are away from home you need either a computer, smart phone, or other device capable of doing so.  If you plan to use a specific computer or smart phone, you should make sure that the camera you acquire can be viewed from your type of computer or smart phone.  Many mac and linux users will discover that some cameras will not work with the browsers on those operating systems.  Some cameras only support the Internet Explorer browser for remote viewing.  Some cameras provide a smart phone app for Android or IPhone phones, but not for Blackberry or Windows 7 phones.  As of August 2011, few or maybe no cameras support viewing from any of the web browsers on a camera, but most support it through an app.

Live streaming video.

Cameras like the one I purchased don’t really provide live streaming video.  Live streaming video requires a lot of upstream bandwidth from your home to the Internet and most home users don’t have this, yet.  But the cameras do take an updated picture every few seconds and provide that to your remote viewing device and this becomes close to having live video.  If you want live streaming video, check with your internet service provider to see what upload speeds you can obtain and decide if you are willing to pay for it.

Image quality.

Most new cameras provide good clear color pictures.  Hopefully you can see some sample images taken from the camera before you purchase it.  The camera setup probably allows you to take high quality or low quality pictures.  In the few cameras I have tried, I found little difference in apparent image quality or in network performance between the various options, so I recommend higher quality images.

Image taken with camera

Motion detection.

Another feature that I strongly desired was a motion sensitive camera.  I wanted the camera to begin sending images when motion was detected in case a burglar had entered my home.  I also have cats in the home and it is fun to review a little bit of their activity and to make sure the motion detector works.  The cameras I have worked with provided poor documentation about the motion detector, leaving me to wonder if it was working or if I had just configured it wrong.  The motion detector is another feature that you definitely want to test prior to expecting it to work.  Most cameras allow you to send the images taken based on motion to your email or to a web site (FTP or HTTP).  I recommend that you do not use the email option, even though I know it is very tempting for non-technical people, because you could end up flooding your email inbox with thousands of pictures every hour.  I used an FTP site for my camera, and when I configured the camera to maximum sensitivity it did send over 2,000 pictures per hour to my FTP site.  Acquiring and configuring an FTP site is beyond the scope of this article, though it is not any more difficult than dynamic DNS.  Some of your may already have a place on the Internet where you can upload files using FTP, and many services like Google, DropBox, YouTube, or Picasa may allow it.  Just be careful that you do not exceed your storage limits and incur hefty price penalties.  When configuring your motion detector, you will probably want to make it ultra-sensitive if it is focused on the interior of your house and there is no expected motion other than a house-sitter or pets.  If you focus the camera out a window and there will be a lot of movement, such as tree branches swaying, then you might want to tone down the sensitivity of the motion detector.

Time to configure.

Don’t expect to receive the camera 1 day before your trip and have it working as desired by the time you leave.  Get it several weeks in advance and get it working.

Live video when viewing from home.

Many of these cameras can provide live video views as long as you are in your home monitoring the camera from your computer.  A few scenarios where you could use this include checking on the baby in the baby’s room, or monitoring the teenagers and their guests in the basement recreation room, or for observing the noise coming from the front door of the house using a camera pointed out the window.

Outdoor cameras.

One day I hope to set up an outdoor camera.  When I do, I hope to share all I learn in that process as well.  Some people may be able to mount a camera indoors to observe some activity outdoors, but if you want to capture sound, or images at night, you may need a camera mounted outside of your house.

Change the camera password.

Make sure to change the password on your camera.  Do NOT use the default password unless you don’t mind other people on the Internet viewing your camera and changing its configurations.

Date and Time.

The camera I am using includes a date and time stamp (if you want it) on each picture.  I like this because I can tell when the picture was taken.  I also like that the date and time stamp is visible when I am viewing the live video because it lets me know that the image is getting updated when the camera is otherwise monitoring a room with no activity.  If you don’t have a date and time stamp, you could arrange a clock within the camera view that is visible from the camera in order to see that the camera feed is updating occasionally and not just showing you an image from hours ago.  However, if the clock changing or movement causes your motion detector to fire, you may not want to use it.  Of course if you are going to have a date and time stamp you want it to be accurate, and most cameras allow you to synchronize the date and time on the camera with an nntp server (which is a computer somewhere on the internet that exists just for that purpose).  I use the nntp server 208.66.175.36.  Another thing you may want to look for when using an FTP site to receive pictures from your camera is to have a camera that makes the date and time a prominent part of the file name, as this makes it much easier to find specific images once those files have been downloaded from your FTP site to your local PC for better viewing.

Telling your guests about your camera

It is proper and perhaps even legally required, that you notify guests in your house that you have a camera monitoring their activity.  If you are using the camera to spy on a house sitter, or a house cleaner, and you hope to use evidence collected from the camera in court you may learn that the evidence is inadmissible if the person was not notified that they were being monitored.  Also, it is polite to notify your cleaners and house sitters about your cameras.  Heck, you might even tell them that you have cameras monitoring the house when you don’t.

Light source for your camera.

If you are aiming the camera into a specific room to monitor while you are away, make sure that the room has a light source if you plan to view images after daylight.

Infrared cameras

One day, I hope to set up an outdoor infrared camera to monitor the wildlife in my yard.  Currently, I am considering getting a trail camera for this.  A trail camera will not have a live camera, but it will take pictures, store them on an SD card, and then I can view those pictures later.  As with any camera purchase, you need to identify the primary value you want to obtain from the camera.  In the case of my night time camera, I want to know what animal is getting to my bird feeders at night, and how it is doing this.  I don’t need live video to catch them in the act, so the cheapest option appears to be a trail camera.

Remote control of the camera.

It would be cool to have a camera mounted on a swivel that I could control remotely.  My camera does not have this feature, and I am not willing to pay the extra money for that feature, but I believe some cameras for less than $200 provide that.  I know a guy that has a camera mounted on a robot in his home that he can remotely drive around his house.  I want that someday too!

Remote configuration of the camera.

Some cameras can be configured remotely, while you are away from home.  I don’t consider this a necessary feature because I expected to have configured as desired before I leave, but if you felt the need to change something about the configuration, it could be useful.

Price

As I mentioned earlier, this camera I purchased only cost $75, plus my time to figure out how to set it up.  I am a technical computer person, so I had little trouble with it, but others may find it more frustrating to figure out why the camera does not work, so you may need to budget extra money to hire some help, or extra time to do the research to get it working.

Cameras without a wireless network.

Wireless cameras are usually desired because we want to be able to place the camera anywhere in the house, not just where we have a wired internet connection.  You don’t need a wireless network to place a camera anywhere you desire within your house.  Another alternative is to use a powerline ethernet connection.  For less than $100 you can acquire a powerline ethernet kit.  A kit like this comes with two little devices that you can plug into an electrical outlet and you can run your computer network connection (IP traffic) through your electrical outlets.  Plug one device into your home router and a nearby electrical outlet, and plug the other into any electrical outlet in your house, and then connect your camera to it.  Not only will it work in place of a wireless connection, but it will probably provide a faster connection than your wireless network.

My TrendNet SecurView TV-IP110W.

So far, I am very pleased with the camera I am using, a TrendNet SecurView Camera model # TV-IP110W.  The features I like are:

  • Date and Time included on every photo, and every filename,
  • I can view the live camera (images updated about every 5 seconds) from any windows PC or from my Windows Phone 7 or from my wife’s Android phone.  This is done with a free app called TrendCam Lite.  Once I install a second camera in my house, I will probably purchase the $1.99 version of TrendCam.
  • The camera supports sending images to an FTP site after it detects motion.

Configurations I made to my TV-IP110W.

To configure my camera, I changed the following settings on it:

  • Basic – Date and Time – I specified 208.66.175.36 for date/time synchronization
  • Basic – User – I changed the default password
  • Network – Network – I provided a Static IP address on my home network
  • Network – Network – I provided information about my Dynamic DNS account
  • Network – Wireless – I provided information to connect to the wireless network in my house.
  • Video – camera – I configured it to include date and time on every image
  • Video – video – I used the default values of VGA, Highest, and 30fps
  • Event Server – FTP – I provided the connection info for my FTP site and tested it
  • Motion Detect – You need to resize one of those little boxes to include most of your camera image viewing area (wherever you want the motion detect to monitor).  Also, I configured the threshold slider always all the way to the left side (which causes the horizontal bar in the square below it to move down).  This is “more sensitive”.  Moving the slider to the left makes it more sensitive.  You can test it by having someone walk by.  Notice the size of the blips in the square box as the person walks by.  If the blip goes above the line, it will trigger the motion detector.
Configuring Motion Detection

Configuring Motion Detection

  • Event Config – Schedule profile – I added a profile for the begin time of 00/01, and end time of 23/59 and applied it to every day.
  • Event Config – MotionDetect Trigger – I set this to enabled, chose the profile I just created in “Schedule profile”, and selected FTP Upload.

Make sure to check my subsequent blog post at https://csharpdeveloper.wordpress.com/2011/08/27/in-home-wireless-cameras-for-less-than-100-part-2/

Posted in Home Tech, I.T. | 1 Comment »

Whose responsibility is it? Fixing LoadLibraryEX on ISAPI filter problem.

Posted by robkraft on July 15, 2011

One of our clients encountered a problem running our web application after they installed it this week. The error message displayed in the browser when navigating to the web application from the web server had something like, “Server Error in Application. Calling LoadLibraryEx on ISAPI filter E:\Mail\Program\ClientAccess\owa\auth\owaauth.dll”. After some trial and error and some Internet searching we resolved the problem by setting a precondition for the isapiFilter in the web.config of the Default Web Site.

<isapiFilters>

<filter name=”Exchange OWA Cookie Authentication ISAPI Filter” path=”C:\Program Files\Microsoft\Exchange Server\ClientAccess\owa\auth\owaauth.dll” enabled=”true” preCondition=”bitness64″ />

</isapiFilters>

Our web application has been installed on over 100 clients and we’ve never encountered this problem. Our first tier of support was stumped
when they first saw the error message also.   However, they could see that the problem was related to Outlook Web Access, and thus it would be very easy to tell our client that they needed to solve the problem themselves, or contact Microsoft to solve the problem.  This leads to the reason for this blog post:

When a software/hardware computer problem occurs due to the interaction of multiple software products, whose responsibility is it to make
the software products compatible so that all the products involved work correctly?

I don’t think our industry has solved this problem, I don’t think we ever will solve this problem, and I fear the problem is getting worse,
particularly as we become more dependent on software to help us through our lives and jobs.  I have seen many approaches to the problem:

  • Some software vendors are willing to lose a sale if a client can’t get their product working.
  • Some software vendors won’t refund the money if the client can’t get their product working and are willing to accept a negative review or blog post or publicity.
  • Some software vendors work with the client until the issue is resolved.

What would you do?

We resolved the problem after finding these two articles:

http://social.technet.microsoft.com/forums/en-US/exchangesvrclients/thread/94c812b5-4bd5-41eb-8396-462e03295201/

http://blogs.msdn.com/b/david.wang/archive/2008/10/30/howto-precondition-an-isapi-extension-dll.aspx

In short, our web application is compiled to run as 32bit, but the Outlook Web Access ISAPI filter is a 64bit DLL and attempted to load into the App Domain we configured (as 32bit) for our application.  The fix tells IIS to only apply the Outlook Web Access ISAPI filter to App Domains that support 64bit.

Posted in I.T. | Leave a Comment »

Apply your Strong Name Key to both DLLs to resolve Friend access was granted compiler message in C#

Posted by robkraft on July 5, 2011

You will get a compiler error message like:

“Friend access was granted to ‘your dll, PublicKey=your key’, but the output assembly is named ‘your dll, Version=…, Culture=neutral, PublicKeyToken=null’. Try adding a reference to ‘your dll…’, or changing the output assembly name to match.”

when you are using Strong Named Keys (snk) files but you only have the .SNK file assigned to one of the two projects you are trying to compile. If you are using InternalsVisibleTo to expose Friend/Internal methods to another DLL, and either one of the DLLs has a strong named key, make sure they both have a strong named key. You can use the same strong name key on both DLLs.

Posted in Coding | Leave a Comment »

JustDecompile set to dethrone Reflector

Posted by robkraft on June 16, 2011

Telerik will be releasing the tool many of us have been waiting for, a replacement for Reflector.  Reflector was, and still is, a great and helpful tool for analyzing .Net code, but every since RedGate renigged on their promise to keep it free forever, we have been upset and worried about our options for the future.

JustCompile from Telerik is your new alternative to Reflector.  Telerik declares the tool will be free forever.   http://www.telerik.com/products/decompiling.aspx

I tried it out and the basic features are very similar to Reflector, so it will succeed it doing what I almost always want from it.  I don’t see support yet for add-ins, but this is just a beta of a free product.  Who knows what else is to come.  I only mention the add-ins because I had one I liked for Reflector that gave a diagram of the Cyclomatic Complexity score of all my classes and methods, which I occasionally made use of.

Posted in Free tools | 1 Comment »

My Twitter account got hacked

Posted by robkraft on June 14, 2011

My recent blog post about passwords appears to have invited attempts to hack my account. Unfortunately for me they succeeded.  I recommended, and still recommend, re-using a simple easy to remember password across all those accounts that you don’t care about.  For me, that included my twitter account.  When I set up my twitter account years ago I used my simple password because I was just checking twitter out.

However, I started indirectly making use of that twitter account when I linked my blog posts to it, primarily just to test how well that link worked.  I still don’t follow or observe twitter much, but I checked it out yesterday and happened to notice that not all of the posts on my twitter account were made by me and were not coming from my blog.  Since my blog posts were still posting to my twitter account, and someone else was directly posting to my twitter account, I deduced that someone had guessed the twitter account password and was spamming on it.

So I changed my password on the twitter account and re-linked it to this WordPress blog, and hopefully the problem is resolved.  For my 14 twitter followers, I apologize for the spam.  This could have been a lot more damaging to me if I had been a congressman!

Posted in I.T. | Leave a Comment »

Test post after having my twitter account hacked.

Posted by robkraft on June 14, 2011

Test post after having my twitter account hacked. 😦

Posted in Uncategorized | Leave a Comment »

If you seek for a pattern long enough, you will find one.

Posted by robkraft on June 10, 2011

If you seek for a pattern long enough, you will find one.  Many people have sought numerical patterns in books, particularly in the Bible.  They keep applying different numerical algorithms until the find an algorithm that produces the results they seek.  Then they claim they have found some sort of truth.  If you apply this approach to any document, you will eventually find the truth you are looking for.

Our brains have evolved to search for patterns.  If you flip coins in groups of 10 hundreds of times, and you count how many times it lands on heads in each group of ten, and then you analyze the results, you will find some patterns.  This is not because there is a pattern (such as if you have 8 heads in one set, you will have 3 in the next set), but simply because you claimed that to be the pattern because it happens to fit all the existing data.  If it truly is a pattern, then it will always hold truth for the future coin tosses.

Posted in Thoughts about life | Leave a Comment »

The Contrarian Guide to Passwords

Posted by robkraft on June 9, 2011

Not everything you believe about passwords is correct.  In fact, some of what you believe is totally incorrect.  Allow me to explain some of the rules for computer passwords.

Rule #1 -Don’t hide the password.

This rule is for those who develop web sites and desktop applications.  Back in the 70’s, a co-worker looking over your shoulder represented the biggest risk for password theft.  To combat this risk, application developers resorted to showing asterisks on screen instead of the password characters as they were typed.  What is wrong with this?  First, it creates account lockouts because users enter their password incorrectly too many times, and users do so because they cannot see and confirm what they are typing.  Second, it causes users to choose shorter passwords in order to reduce the challenge of entering a mistake free password on screens where you cannot see the values you are typing.  Third, very few people  today are concerned about the person looking over their shoulder to steal their password.
We are far more concerned with hackers on the Internet guessing our passwords  through brute-force attacks.  Therefore, most web sites and applications should show the password as it is typed.  This will improve the accuracy of password entry and provide a more pleasant logon experience.  Most applications should include a checkbox labeled ‘Hide password as I type’ to give the user the option of masking the password as it is entered.

Rule #2 – Write your passwords on a piece of paper.

If you would prefer to use a long and complex password but are afraid that you won’t remember it, write it down on a piece of paper.  Remember, in most cases we are trying to protect our account from getting hacked by someone on the Internet, and they don’t have access to your basement office where you do all your work.  So feel free to write down passwords and tape them to the wall or monitor.  A long and complex password
written on a piece of paper is more secure than a short and simple password that is easy to remember.

Rule #3 – Put all your passwords in one document on your computer.

Let’s face the truth, we all have a lot of passwords and we need to keep track of them somewhere besides in our heads.  The convenient place to do so is on the computer so that you can find them when you need them.  So how can we keep this document safe in case someone else gets on our computer, or our computer gets stolen?  Well, you can store your passwords with a program like kee-pas that will encrypt them all for you.  You could also put them in an Excel spreadsheet, but if you do so, I recommend you name that spreadsheet something like system.dll. Make sure the file does not have the .xls extension.  Most laptop thieves would never think to open system.dll in Excel or notepad to see if it contained passwords.  Of course, if your computer is stolen you should begin changing your online passwords soon.

Rule #4 Print all of your passwords on a piece of paper and stash it somewhere.

A locked, fireproof safe in your house is an ideal location for this.  You want to put the list somewhere convenient for easy reference, but you don’t want to paste it on the refrigerator for the first burglar to spot.  Taping it below the desk your computer is sitting on, or tucking it in the refrigerator work well also.

Rule #5 – Use the same passwords over and over.

Do you need to create an account on a site you’ve never been to and never plan to go back to after you download their white paper?
Then use the same simple password you have used on hundreds of other similar sites.  I use the same simple password on the Pizza Hut web site, the Papa John’s web site, the On The Border web site, and a hundred other sites that have no financial information about me and no profile of myself that I am concerned about being vandalized.  But you should never use a password used on an important site on any other site because if someone at one site learns your password they may attempt to use it on other sites.

Rule #6 – Don’t change your passwords…

all at the same time.  Ok, I admit that I was just trying to trick you into reading this rule.  You should change your passwords probably at least once a year or more.  I don’t.  But do as I say, not as I do.  I change my passwords at work regularly, but not the passwords on my bank accounts, facebook, email accounts, etc.  I mean to change them though!  I have a reminder to myself to change them.  But I already have them all memorized and it takes a while to memorize new passwords, so if I change them I need to have my list of passwords accessible for a while as a backup to my brain.  Also, it takes a few minutes to come up with new good passwords and to go through the process of changing them.

My real advice here is that you should not try to change all your passwords at once.  Instead, pick a few to change every month.  Doing so will make it easier for you to remember the few new passwords you changed instead of trying to remember the fifty you changed all in one day.  Also, in case your computer happens to be infested with a keystroke logger, you don’t want to change all your passwords at the same time and give away all your passwords to every account you own in one day to the villain on the other end of the keystroke logger.

Rule #7 – Don’t even bother to remember or write down your passwords.

Most web sites provide links to send you a new password or a password reminder in case you have forgotten your password, so why even bother trying to remember it.  Just enter a long, complex password; and then every time you need to log in use the ‘Forgot Password’ option to email the
password to you.  However, you probably don’t want to do this for sites you login into frequently.

Password guidelines

For really secure passwords, use a pass phrase at least 10 characters long with upper case, lower case, numbers, and a special character.
TheRoyalsWon8-2!  MyChiefsLost49-0!  If you want to write it down, write down a mnemonic like SWOIyear for StarWarsOpenedIn1977.  Then anyone can see your mnemonic password, but hopefully only you will know how to decode it.

Another approach is to use a pass phrase for your password, but substitute some of the letters for numbers and special characters.  Then,
write down the pass phrase without substitutions.  If your password is IH@veNoP@ssword write down IHaveNoPassword.

One more option is to use foreign language phrases for passwords.  In Spanish, Muy Caliente means very hot and MuyCal1ent@ is a very strong
password that is also resistant to English dictionary attacks.

But if you really need a great password, go to https://www.grc.com/passwords.htm to have one generated for you.

Posted in CodeProject, I.T. | Leave a Comment »

Find bugs in your javascript using Closure

Posted by robkraft on June 5, 2011

Just in case you have not found the Closure tool from Google yet, I’m making this little post to help you discover it.  Closure is a free online tool at http://code.google.com/closure/ that will examine your javascript for bugs and compact it for you.  If you write javascript and are not using any tools to assist you in finding coding errors, check out closure.  It is online and it is free.

Posted in Code Design, Dev Environment, Free tools | Leave a Comment »

Mastering Software Development

Posted by robkraft on May 31, 2011

To master software development you must know many things more important than writing code.  To get it right, with optimal efficiency, you
must be good at identifying the best solution to your customer’s needs.  You must be good at choosing technologies to use to create the solution.  You must be good at implementing those technologies.  You must be good at identifying what is most important and valuable to work on at every moment.  You must know when to take the time to learn a new skill or new tool instead of using skills and tools you already have mastered.  You
must know how to set customer expectations about the features and the delivery schedule so that will not be surprised at any point or get less than they desired.  You must know how to communicate with clients the estimated cost and value of alternative solutions so the client can make the decisions.  You must know how to estimate closely the cost and benefits of different alternative approaches to a solution.  You must write code that is easy to maintain.  You must be sure your code works as designed, desired, and that it meets requirements.  You must write code that performs well, is free of major defects, is free of security holes, and follows industry standards and government regulations.  Your solution must be easy
for your customer to deploy, understand, and use.  You must master all these things to master software development.  And then, you have
only mastered software development when you are the only person on the team.

When you are a member of a team, or a leader of a team, you must master many more things.  You must understand how to evaluate alternative architectures and guide the team to selecting an acceptable one.  You must know how to evaluate the mood of team members and address emotional issues.  You must know when and how to allow sub-optimal code to enter the solution in order to reduce the stress and anxiety of a team member, or because a team member does not have the skills to complete the code in an optimal fashion in the desired time frame, or because you don’t want to spend the many hours trying to explain why one design is better than the other, or because you need to bring a team member up to speed on certain technologies.  You must know how to help the team identify what is most important to work on.  You must know how to help team members evaluate their own skills and know when to ask for assistance.  You must know how to motivate and lead team members to take ownership of the code and to write quality code.  You must know how to help team members prioritize the work to be done and prioritize features to optimize the work flow process.

Do you get the drift?  To master software development, you must be exceptionally lucky.

Posted in Coding, Project Management | Leave a Comment »

 
Design a site like this with WordPress.com
Get started