CodeBetter.Com
CodeBetter.Com
RSS 2.0 via Feedburner
           Do you Twitter? Follow us @CodeBetter

Eric Wise

Business & .NET

June 2005 - Posts

  • Thursday Thoughts

    The more projects I see the results of where the customer lives in a vacuum, the more convinced I become that for a project to be very successful there must be close ties between the developers and the customers.  For those of you familiar with the latest buzzword methodologies like Agile and XP Programming, it is becoming pretty popular to say that a member of the customer's team should be placed in the development group to provide instant feedback about features and functionality.

    While this type of thing isn't always feasible from a business sense, I have noted in my career that the more involved the development team is willing to get with the customer, the closer the end result gets to being what the customer actually needs.

    On an unrelated note, I attended a business event the other week where I met an academic advisor from one of the local universities.  Since I've been relatively successful in navigating a career in IT, she was asking me what I would recommend students beginning or currently in a Computer Science program should do to make themselves more attractive as job candidates.  I responded with the following:

    1. Writing/Composition/Speaking- Sorry to burst anyone's bubble, but the more experienced and higher you rise in an organization, the more you be required to write whether its specifications, managing relationships with members of other departments, or even external communications.  People may not always understand the technical aspects of what you are putting across, but they can make some assumptions about your intelligence based on your ability to communicate.  In addition, building and maintaining relationships is the easiest way to get ahead in your career, so do reach out and talk to people.
    2. Minor in Business- Each and every one of you will be working for a business (I consider the government to be a really inefficient business).  If you are like the vast majority of programmers, you will be on an internal IT staff or doing consulting work for business customers.  That being said the more you understand business terminology and concepts, the better you'll be able to communicate with your customers.  Workers who can speak both techie and business jargon are invaluable to an organization since they can help break things down in terms the customer understands and so has an easier time winning approval from other departments.  Being strong in business and management is a great way to put yourself on the fast track to increased responsibility, project management, and much higher pay than a heads down developer gets.
    3. Internships- Experience is king.  Let me say that again: EXPERIENCE IS KING.  There is no replacement for experience.  This is why if your college offers an internship program, take as many internships as they'll allow you.  If they don't, go beat the doors down at local companies and find one yourself.  Having real job experience not only builds your credibility, but it also decreases the risk of hiring you since you've proven you can survive in a business environment.

     

    This officially satisifies my guilt at not posting for a week.  I'm on an extremely agressive deadline for a project right now and I just haven't had time...

  • An Argument For C#

    <Begin Musing>

    I was reviewing some code the other day from one of my developers who recently made the jump from classic ASP to ASP .NET and I found that the developer was using a lot of the old VB core functions like cint(), dateadd() etc instead of their new .NET Framework counterparts.

    In my opinion, it is preferred to use the .NET Framework methods whenever possible instead of the VB Specific ones both for potential compatibility for porting code to other .NET languages and because of my unverified belief that some of the Framework specific functions may be more efficient.

    So I got to thinking about ways that we could pursue to help make these developers aware of the framework functions and more importantly break the "bad habit" of using the old school functionality beyond tools like FX Cop.  The problem is not the talent or intelligence of the developers, but more of a habitual one.  It struck me that this would be one of the main benefits of transitioning from vb 6.0 to C#... it would force you to leave behind the old school VB functions we all know and love and learn the Framework.

    </End Musing>

    Posted Jun 30 2005, 07:55 AM by Eric Wise with 4 comment(s)
    Filed under: ,
  • More "broadband" pain

    Another weekend, another chance at a learning opportunity missed.  I was hoping to download and install the latest CTP of SQL Server 2005 but once again my "broadband" provider is happily charging me $44/month for high speed service that isn't what any reasonable human would call high speed.

    If I was in charge of the FCC I would nail a company like this for false advertising.  Luckily the lot that I'm building my house on has Time Warner, I've had roadrunner before, it was great, and I can't wait to return to it.  The provider I have has a damn monopoly on the apartment complex I'm in, no cable, no dsl, nada.  So much for free markets eh?

     

    Share my joy:

    Posted Jun 25 2005, 08:05 PM by Eric Wise with 4 comment(s)
    Filed under:
  • Beware your contract

    A very common mistake I see being made by developers involves the signing of their employment contracts.  Oftentimes there are clauses, like invention clauses, in the contract which can have a signficant impact on your personal time and pet projects.  The purpose of this article is to make you more aware of the legal issues involving employment contracts, and help you avoid signing a contract that could potentially harm you.  As most of my readers do realize, I am not a lawyer, this article is not intended to hold up in court, if you have doubts always consult a professional.

    Congratulations!  You're hired!

    Exciting, isn't it?  You've gone through the entire interview process and been offered the position!  The HR department sends you a bunch of forms to fill out including their "standard employment agreement".  Many people I know glance over the agreement quickly, shudder away from the legalese, and sign the form.  Many others actually read the legalese, see something they don't like, but are afraid to say anything about it because they really want/need the job and don't want to "cause trouble" before they are even in the door.

     

    Do not be afraid to contest sections of an employment contract

    If something looks unfair or out of place to you, do not hesitate to contract the HR person about it.  Explain to them why you feel like the clause(s) in question would harm you and ask if they have an alternative contract or would allow you to modify the contract.  There have been quite a few times in my career where I've sat right in front of the HR rep, crossed out the sections I don't agree with, and wrote my own version of those sections to be less restrictive so I could protect my time and personal activities.  Let me also point out that not one time have I ever lost a job offer for wanting to modify the employment contract.

     

    Invention Clauses: What they mean to you

    The invention clause is the most dangerous clause in your employment contract as a developer.  Generally speaking, an invention clause has the purpose of protecting your employer by requiring that you sign over any and all rights to anything you invent.  This makes obvious sense: If you have a job for XYZ corp working on proprietary software, you obviously shouldn't be allowed to pull your work out and resell it to one of their competitors.  They financed the creation of that software and the tradeoff for your paycheck is giving them ownership of your work.

    The problem comes in when companies attempt to tie up work that they have not paid for.  Many times invention clauses are designed to be very broad and can be interpreted to mean the employer owns any software you create.  This is a huge no-no to sign.  The repercussions of signing this is that even if you create a software program completely unrelated to the business of your employer, they could still claim ownership of it and come after you.  Do you do small consulting projects on the side for friends and business contacts?  Be careful, even though you do these projects on your own time and equipment, a broad invention clause could mean your employer could assert ownership over that work and sue you for the revenue you made.

     

    Defeating the invention clause

    A good contract that has an invention clause will have a section to write exclusions for works you previously created or are in the process of creating.  Basically in this scenario they want you to list everying you own now and are working on and say that anything you create going forward belongs to them.  This is ok if you have no desire to work on anything but what your employer gives you, I never signed these contracts personally.

    To defeat an invention clause, make sure you edit (or have HR edit) the contract to specify the following key points:

    1. All work performed under the direction of the employer belongs to the employer provided that it is done on company time/payroll, it is done on company equipment, it is specifically requested by the employer.
    2. All creations by the employee not related to the employer's business belong to the employee so long as they do not use company time or equipment.

    Those two modifications are usually enough to satisfy the employer that all their work is protected, that you won't go behind their back and compete with theme, and still gives you the freedom to pursue your own projects on your own time.

     

    Moonlighting

    Most companies are against moonlighting since they know that you only have so many quality hours of work in you each week.  By taking side jobs you are potentially reducing your effectiveness during the time the company has paid for.  It is very hard to defeat a moonlighting clause unless you already have a side job in progress.  This section of a contract I'd say feel free to ask about overturning if you already have a gig, but otherwise I'd leave it alone.  If any modification is to be made, try to put in that you can moonlight with consent of your manager.

     

    I hope this article helps all you developers out there to be more aware of the repercussions of signing a contract with an invention clause and helps you to realize that you do not have to blindly sign anything they put in front of you.  At this stage of the hiring process a lot of time and effort have been put into you and an employer will be reluctant to lose you over a reasonable request to a contract modification.  If they give you a hard time, they're probably not worth working for anyway!

  • Self-Made Slaves

    It's politics day on CodeBetter.com, so I thought I'd take the opportunity to weigh in on a few concepts about wages, unions, personal finances, and the IT business in general.

    The American Dream

    Sahil makes an interesting point in his post about the "American Dream" and people living beyond their means today.  The American Dream originally started with the concept of people that worked hard and sacrificed to obtain freedom in the form of land ownership, no fear of religious persecution, and a decent life for their loved ones.  Immigrants to this country often came with nothing and did some tough jobs at wages so crappy that most pampered Americans today would be appalled at the thought of taking such a job.

    Somewhere along the way, the Dream got lost.  The message got changed from hard work and sacrifice to entitlement.  Many people I interact with on a political level seem to feel that just being an American entitles you to two cars in your garage, cable, a big screen tv, a big house, etc etc etc.  Because of this perception people feel this driven need to keep up with the Jones' down the street and max out their lifestyle to match or exceed their wages.  Savings rates are at incredible lows, bankruptcies have reached the point where the government has changed the laws to make it harder to file, and when people lose their jobs they're screwed if they don't start working in 30 days instead of having that 6 month cushion that any financial analyst with half a brain recommends to consumers.

    In essence, the average American is a slave to their own lifestyle.  Let's take a look at my friend, we'll call him Joe for these purposes.  Joe graduated with an IT degree, and started out with a load of college tuition debt and an average credit card debt of $8,000.  He landed a job for a software firm making $30,000/yr which is pretty decent money for a new grad.  Did Joe buckle down and pay his debts off?  No, Joe celebrated his freedom from college and his first real job.  He leaped into an independent lifestyle by moving out from his roommates into his own apartment, he traded in his clunker car and bought a new one for $250/month, he updated his furniture, his wardrobe, and started having fun going out on the weekends.  Why not after all?  He's earned the right to pamper himself after being broke for so long in college.  The hard fact is, however, that after all his spending, he didn't have enough money to pay off his tuition and credit cards, his lifestyle had expanded to meet his new wages.  When Joe was laid off after 8 months in a corporate buy out, he was in worse shape than ever!  Joe has since recovered and found a new job etc.  My only sad feeling for Joe is that he lives in a constant state of fear about losing his job.  He refuses to decrease his standard of living and save some money, so anytime hardship hits he's back at square one, it's a very sad way to live.  His current employer walks all over him demanding unpaid overtime and not growing his career the way they should be because they know he's afraid and take advantage of it.  Shame on them for doing that, but more shame on Joe for allowing himself to be in that situation in the first place!

    How many of you are guilty of this?  How many of you upon getting a new raise or a new job quickly increase your lifestyle, filling in all the gaps in what you feel you deserve?  I'm not saying you shouldn't buy nice things or have fun, but always remember to pay yourself first.  Did you know that with average rate of return if you saved merely $10/day when you graduated college you'd have over a million dollars when you retired?  Just think, a pack of a cigarettes and a latte from starbucks sacrificed and you're a millionaire.

     

    Wages

    Ultimately, wages are negotiable.  Your entire compensation package is negotiable.  It all breaks down to a few things:

    1. How valuable have you made yourself- Always seek improvement in your career.  Read everything you can, go to conferences, get involved in communities.  Broaden your experience and market yourself to people you know, create a reputation.  These types of things build the experience (and confidence) necessary to leverage yourself positively in negotiations.
    2. How good a negotiator you are- You would be shocked at how much pay rates can vary within a company for similar positions.  The difference comes down how good of a negoiator a candidate is.  People in general seem to shortchange themselves.  Here's a good rule of thumb: Think about what salary you'd be decently happy with, now add 20% and ask for that.  If you've got an employer to the point where they're talking salary with you then you know they want you.  If the 20% is out of their budget they'll come back with a lower number, but it will NOT be 20% below what you asked for.  Well, maybe, but it's never happened to me or anyone I know.  You might be unlucky =).  Think of it this way though, if you think 50k would be nice, and you ask for 60k, how shocking is that to an employer with 10 million in revenues?  10k is a lot to you, but the reality of the situation is that it is peanuts to your employer.

     

    Changing Jobs

    Changing jobs is the best way to push your salary up in the early stages of your career.  I personally never held a job for more than 2 years.  Old school hiring consultants will say that this looks bad to employers, but frankly I've never had my job history judged all that harshly.  Employers understand a few things about the market:

    1. With the elimination of pension plans and retirement packages, there's little incentive to stay long term with an employer financially.
    2. Downsizing and layoffs are common, getting axed isn't the badge of shame it used to be.
    3. They desire to have employees that are driven for improvement.  Take that negative connotation about your job hopping and turn it into a positive one that shows you as a person who wants to grow and be challenged.  I always left jobs the moment I capped out my growth and ran out of challenges.  Leave the boring maintenance mode to boring people, I wanted to be on the front line.

    Later in your career it may make sense to stay long term with a company, just make sure that they treat you well.  Good IT workers are a precious commodity.  Even after the dot com purging there are still a lot of poor professionals out there.

     

    Unionizing IT

    If IT goes union, I'm leaving the industry, simple as that.  Now unions aren't all bad, they have several good points:

    1. Worker protection- tenure, etc protect your job.
    2. Open knowledge- payment scales, benefits, etc are all open knowledge, where your salary in a company is a secret.
    3. Bargaining power- if you want something, you can get others to help you demand it.

    However, unions absolutely SUCK for several reasons, these are the reasons why I refuse to be involved with them.

    1. They tend to reward tenure, not excellence- Tenure and seniority are rewarded, at the expense of young, motivated, and more skillful workers.
    2. You get forced into issues you don't want- You're a collective, if you feel against an issue but the majority votes the other way, you're stuck, unless you quit.
    3. Corruption- Union officials managing dues, giving your money to politicians that you may not support, all this stuff is on your dime and you don't have any control over it.

    In addition, look at how agreements with the unions is helping (only helping, there are other problems too of course) to put the airlines out of business?  Manufacturing is a dying industry because our labor is too expensive.  Why?  Because union contracts mandate that someone with tenure gets $17/hr to perform an unskilled task.  Sure the individuals are reaping the benefits, but they're cannibalizing their future for the sake of the present.

  • Another Reason Asset Management Is Important

    Link from the BSA:

    http://www.bsa.org/usa/press/newsreleases/BSA-Collects-from-Marketing-Solutions-Company.cfm

    Notice that this company was not in compliance with their software licenses (something that can be tracked in Easy Assets .NET) and the cost?  $65,000

    Suddenly spending a few thousand on a good Asset Management solution doesn't seem so bad eh?

  • Firing Clients

    Excellent article here for you wannabe consultants about abusive client relationships that you should end at the first opportunity.

    Here's some of my own comments on these 11 clients you need to fire right now:


    THE DISILLUSIONED consistently expresses disappointment with your work even though it is of good quality and conforms to spec.

    This client is a very hard one to deal with.  They often have pie in the sky ideas mixed with a difficulty of expressing those ideas in the form of a spec.  What they end up with is something that works, but isn't what they envisioned in the special world inside their head.

    Oftentimes though if they're an otherwise reasonable person you can work with them over time to manage their expectations and improve their spec design abilities.  I wouldn't drop this client until I at least made an effort to work through their problems.


    THE SUSPICIOUS consistently expresses a lack of trust, disdain for your work, or questions your integrity.

    I have not found a good solution for this kind of client.  Usually they are a "know it all" type or a client that has been burned by bad contractors in the past.  I try to build confidence with every client but sometimes it just doesn't work out that way.


    THE CHISLER consistently complains about your bill, even though it conforms to the estimate they agreed to.

    This is one I personally have to work on.  I tend to be a "nice guy" and I often catch myself discounting work to maintain a positive relationship with the client.  What I have learned, however, is that once you take that first fatal step and discount some work suddently every line item on the bill is negotiable.

    Doing extended business with the chisler is hell on your margins, if someone comes across as a chronic chisler you're better off ending the relationship.


    THE SOMETHING-FOR-NOTHING consistently increases the scope of the project but refuses to pay for the additional work.

    This is a symptom of clients not understanding the term "estimate" and clients not being aware of the impact a visually small change can have on an application.  It's hard to explain to a client why x change will cause the database relationships to fundamentally change which requires a huge amount of backend changes just for a "little" thing.

    On a side note, I love the author's comment about this being the equivalent to ringing up a bunch of groceries at the store, then adding a few items and bitching that the total price went up.


    THE SLOW PAY consistently pays invoices late.  In any small business, cash flow is king. Heck, in any large business, cash flow is king. So let's just say: cash flow is king, period.

    I couldn't agree more.  It always amazes me when clients consistently pay late knowing that my company has employees and subcontractors that I'm responsible for.  I often wonder how they would feel if mysteriously their next paycheck was a month late.  Generally though I don't consider this a client firing event unless the lateness is extreme.


    THE FLAKE consistently is late meeting responsibilities, but still holds you to the original schedule.

    I haven't had any experience with this one yet.  Being a pretty punctual (and busy) person though I tend to get annoyed by people who waste my time.  I personally have more trouble with:


    THE CLINGER consistently makes unreasonable demands regarding your availability.

    This client tends to think that not only are they your only client, but that any time, normal waking hours or not is free for them to call.  Many service organizations charge a premium for service outside normal business hours and I think it's something that any contractor with a family and a value for their personal time needs to consider putting into their contract.  That being said customer service is very important, and if a client has an emergency I'm more than happy to accomodate them.  However if I'm occupied with another task I tend to get offended if a client demands a non-critical favor at the expense of myself or another client.


    THE BLACKMAILER consistently refuses to pay an invoice until you perform additional work at no charge.

    This problem is more the fault of the consultant in my mind.  Be very careful what kind of work agreements you sign.  Make sure you specify the following in your contract:

    1. Specifications must be supplied or signed off on by the customer before work is begun.  Changes to signed off on specs are subject to additional fees at an hourly rate.  (Saves your ass in a fixed rate agreement)
    2. In the case of a dispute over line items, client is obligated to pay the balance of line items that are not disputed.  This gets you at least some of your money.
    3. Client has full ownership of the source code once payment is made.  Never, ever turn over source code that has not been paid for.  If you do you give up the only leverage you have in a dispute.
    4. In addition to #3, make sure you invested in a good source control system.  If a client doesn't pay you for the end of your contract period, roll that puppy back and send them the code they've paid for while keeping a copy of the current source pending payment.
    5. Specify in the contract that if the client is late in paying an invoice by more than X days (I usually say 1 week), that all development will halt until the client catches up.  This prevents you from being in a situation where the client has racked up a significant amount of debt and stiffs you.  Make sure that the contract specifies that any delay in schedule caused by development halts due to late payment is not your problem.
  • Interview with Darth Vader

    Trying to console myself for missing TechEd due to it filling up so damn fast.  So here's something I found humorous:

    http://www.yourish.com/archives/2005/june5-11_2005.html#200506601

  • Inheritance And Interfaces

    A common question I get from developers new to OO programming and VB .NET is what the difference is between inheritance and interfaces, particularily when should you use one over the other.

    At its most basic level, the difference between inheritance and interfaces is that inheritance is intended to allow you to share an implementation, while an interface specifies that you must implement something, but supply your own logic.  Many people liken an interface to a "contract".  To use an interface you must expose certain functionality, but the implementation of that functionality is up to you.

    Make sense?  No?  Let's look at the IComparable interface in .NET:

    Public Class test
        Implements IComparable

        Public Function CompareTo(ByVal obj As Object) As Integer Implements System.IComparable.CompareTo

        End Function
    End Class

    When you implement IComparable, Visual Studio automatically puts the function signature CompareTo in for you.  By implementing IComparable, you have to follow the contract that specifies that you must have a CompareTo function.  To do otherwise would cause a compiler error.

    Note that there is no code in this function.  You've created a custom class test and you want to compare it to another object.  The author of IComparable has no idea what criteria needs to be met for the objects to be considered equal, so they leave it to you to fill out.

    In contrast, if you were to inherit a class, like in this example:

    Public Class test
        Inherits Inheritable

        Sub New()
            Me.DoStuff()
        End Sub
    End Class

    Public Class Inheritable
        Public Function DoStuff() As Boolean
            'I'm doing stuff
            Return True
        End Function
    End Class

    You'll notice that even though DoStuff() does not show up in the test class when inherited, it is still accessible by the test class.  The code inside the parent class (inheritable) will execute the same for any class that inherits it.

    So basically, if you created a class you intended other developers to inherit, but every single function/sub was marked as "MustOverride", then you've really created an interface!

  • Cleveland .NET Jobs

    Just wanted to let all you blog fans know that School One in Cleveland is hiring 3 .NET Developers.

    "Growing Educational Application and  Technology Services Company seeks full-time developer with BA/BS and approx. five years professional experience creating scalable, custom web apps using ASP, MS SQL 7, HTML, DHTML, and JavaScript.  Experience with VSS and InterDev required.  Experience developing in .Net and writing store procedures required.   Experience developing web apps from initial concept through final production deployment, as well as maintaining/retooling existing web apps.  Must be comfortable working with QA to ensure consistency, product reliability, and functionality on MACs, PCs, and all major browsers.  Position requires excellent communication skills, customer centricity, self-motivation, and positive work ethic.  Casual environment.  Medical, 401K and paid vacation."

     

    School One really does a great job of taking care of their employees and they have a talented set of developers on staff.  If you're interested in a position like this let me know through my blog.

     

    No relocation provided as far as I know.

More Posts