Early Career Success Practices

I’m closing in on five years of success in the professional workforce (technology / business consulting, to be specific). Time to share what’s worked. I’m sure that in 5 more years, I’ll look at this again and realize that I missed on some ‘practices’. Take it for what it is – an opinion based on personal experience.

  1. Ask for the opportunities you desire for your career path, and create the ones that are missing. There’s nothing wrong with asking. You’re ultimately the only person who will drive your career path – realizing that your hands are on the steering wheel is a great feeling.
  2. Evaluate your market worth every couple years, and leverage that worth when needed. Knowledge is power. Would you work for 75% of your current salary? Maybe you would, if it meant spending more time with your family. Understanding the market landscape helps you to make informed decisions about compromises.
  3. Connect with everyone you work with, because your network will be your most important asset. I can’t stress this one enough. Make a connection and give freely. Investing in your network is usually long-term, but it will always have high returns.
  4. Give back your knowledge by mentoring someone new. Sharing lessons that you’ve learned with a junior is typically a good exercise for both parties. You get to give back and learn about another person’s perspective, while the newer person gets to hear valuable experience.
  5. Challenge yourself to do work that makes you uncomfortable. Work is harder when you’re pushing the limits of what you think you can do. It’s also more rewarding and will open doors to new opportunities.
  6. Refuse to follow the established methods when you have a better idea. Challenging the norm can get you into trouble when done incorrectly, but if your motives are correctly communicated then you can make work better for everyone. Intelligence and experience are very separate – don’t let a lack of experience keep you from contributing your intelligence.
  7. Never, under any circumstance, make an excuse for your failures. If you challenge yourself to difficult work then you will ultimately have some failures. Be the first to admit your short coming, but make sure that you’ve setup a support system to handle it appropriately.
  8. Change your environment every chance that you get. This is a pretty easy to accomplish in consulting, but I imagine there’s an industry parallel to draw (e.g. change departments whenever you can). It exposes you to more portions of the business and will help to round out your experience.
  9. Work with people smarter than you. As iron sharpens iron, so one person sharpens another. If you’re ever the smartest person in the room, then who could you possibly be learning from?
  10. Make sure to praise others when they contribute to your success. Early in your career you will typically lean on others quite a bit. Simply acknowledging the fact that someone else is taking time from their day to help you can go a long way. Buy them lunch. Or a beer :)
  11. Try to solve your problems before you ask for help. Getting help from others will teach you a lot. But you don’t want to be that person who always has a problem with no solution. Prove to others that you care by taking a first crack, even when you know that you’re way off on the answer.
  12. Create a brand for yourself. When you are active in the community then people will start to remember you for something. Being the go to person for a knowledge area takes you to the next level for self-branding. You want people to think of you when they have a difficult problem to solve, and your brand will help with that.
  13. Leave stress behind and ensure that your work is contributing to your overall happiness. Your career wouldn’t be all that rewarding if it consumed your whole life, right? If work makes you unhappy, then you have the power to change it.
  14. Take all your vacation time and don’t work when you go home. The bottom line is that the work will be there tomorrow or next week, just like you left it. Trust the others around you to pick up the slack in your absence. Enjoy the time away and recharge. You’ll know that you’ve had a good vacation when you’re starting to think about work challenges again.

Note: these aren’t in any specific order, just some thoughts I’ve collected recently.

Posted in Professional Tagged with: , ,

Great Advice from Pariveda Executives

Bruce Ballengee, CEO

Never stop growing yourself and others. If you do, you die a little bit everyday you’re not.

David Watson, VP Seattle

Treat your customers/clients as you would some of your closest friends.

Steve Cardwell, VP Atlanta

In this world, people make all the choices and if you figure out the people part then you’ll be very successful.

Brian Orrell, CTO

Never do anything well you don’t want to do for a long time– the corollary: become really good at the things you enjoy doing and the demand will follow.

Kerry Stover, COO

Leaders are only leaders IF people choose to follow. Without followers leaders aren’t.

Michael Evans, VP Dallas

Expect more of yourself than others do; never let a 3rd party (employer, market, colleague) challenge you more than you challenge yourself.

Liem Vu, VP West Region

Discipline – will help you grit through not only the most mundane of tasks but also the most complex.

Penny Wand, VP Chicago

You can only fail forward.

Christopher Paul, VP San Francisco

Always be candid, forthright, honest, and fair.

Susan Paul, VP Dallas

Bring solutions. Managers get barraged all day long with problems. If you can take something off their plate by bringing a solution, you are a net contributor and make their life easier.

Posted in Professional Tagged with: ,

Comparing Responsive Frameworks

As part of my current project, I did a short investigation on a handful of different responsive frameworks (allows for web content that will react to different browser widths). My blog is an example of a responsive website… Go ahead: re-size the window width and notice the content respond to the changes.

Frameworks investigated

I did a full webpage implementation with each of the frameworks listed below, including customization to the framework (e.g. button color, images, padding, etc.).

TL;DR

You can’t really go wrong with any of the linked frameworks – they will all serve you well. If you have complex layout concerns, then absolutely go with Foundation. If you want to build a site from scratch with a ton of great UI features, then go with Bootstrap or Gumby. If you simply want a starting point for fixed grid responsiveness, then go with Skeleton. Don’t do a from-scratch implementation.

Resources

Aside from trying out each of the frameworks, I found some good resources which I believe are worth calling out:

Notes

I found that Gumby and Bootstrap were similar, although Bootstrap has been around longer and has more UI features. In my findings sections, I’ll consider them the same.

I saw almost no reason to go with a from-scratch implementation – you can at least start with something extremely minimal like Skeleton to give you a head start.

More detailed findings

Gum & Boot Foundation Skeleton
Grid Solid fixed Best fluid Basic fixed
Browser support Good Manageable Best
Pre-processor LESS/SASS SASS None (one file)
Ramp-up Difficult Moderate Easy
Posted in Professional Tagged with: , , ,

A unique opportunity for the experience of a lifetime

Hello friends. I’m moving from Houston to Los Angeles! This is a very exciting time for me, but I can only stand talking about the same topic so many times… I went ahead and compiled a list of questions (who, what, when, where, why) and answers that you might be pondering. If you need to know anything else, just leave a comment or send me a message.

Who do you know in Los Angeles?

Pretty simple: not that many people. I can count them on one hand and they include new coworkers and past classmates from Texas A&M. This will be the most difficult portion of my move as the majority of my family and friends are (and have always been) in Houston.

What are your goals?

I’ll have lots, but the underlying goal will be to thrive in a new environment. Here are some other things I’d like to do while I’m adjusting:

  • Cook more and eat healthier in general
  • Get into better shape
  • Go snowboarding at least a half-dozen times
  • Play too much beach volleyball and get decent at surfing
  • Wake up by 6 AM on weekdays (coffee allowed)
  • Play the California field (hopefully they’ll like my Texas charm)

When are you leaving and will you come back?

I’m leaving early in December but will be back immediately for the holidays. I’ll be gone for at least a year – chances are that I will stay in Cali for a little longer than that. Even in just one week in Los Angeles almost everyone I meet tells me that I won’t ever leave. I seriously doubt that… There’s just too much back home that I know I’ll miss.

Where exactly are you headed?

Hermosa Beach, California – about 30 minutes south-west of Los Angeles. Send me a message if you’re interested in the exact address or if you’d like to visit sometime. I’ll be a few minutes (walking) away from the beach.

Why are you leaving Houston?

A few reasons:

  • My employer, Pariveda Solutions, is offering a really excellent relocation package for experienced folks to head to some of their in-need offices. I should clarify that the office is in need of resource – we have work but need more people to get it done. This will also be a great chance for me to help establish the Pariveda culture in a new office.
  • The timing seems perfect… I’ve been renting in Houston for ease and flexibility, I’m single, and I’m at a good age to do some travel in my life. It’s almost like a quarter-life crisis. But instead of crisis I’ve got opportunity.
  • I’ve never done anything like this, and it seems like a fun way to challenge myself. When I was evaluating whether or not to take advantage of the opportunity I found myself coming up with very few reasons to not move to California.

Wish me luck! I’ll keep my blog up to date with my adventures in SoCal.

Posted in Personal Tagged with: , , , , ,

Why you should (not) use Test-Driven Development

Background

Believe it or not, every programmer is a little bit different. We all have our own preferences, strengths, and weaknesses… It wasn’t until last year that I tried to spend a little time to figure out where I fall in these categories. After getting several years of programming under my belt, I found that my preference was greenfield (all new everything), my strength was a balance of quality and speed, and my weakness was testing. [Note: conducting regular reflections like this is important because it helps us see opportunities that we might otherwise overlook] Towards the beginning of 2013 I was assigned to a new project that gave me a good chance to work on this weakness. So:

Preference – greenfield; Strength – balance of quality and speed; Weakness – testing;

This weakness shouldn’t surprise too many folks in the software industry. What computer science programs do you know of that hold testing in high regard? The truth is that testing is a second class citizen in curricula at best – and for good reason. It can be hard enough to grasp the fundamentals of writing readable code while in school, so taking that momentum into writing maintainable code is even more difficult. For me, concepts of maintainable code didn’t quite click until I got on a few big projects my senior year in school – when I also began my mastery in the art of refactoring (by necessity).

Some code ninjas would say that all this progress was leading me directly to test-driven development (TDD), a method regarded by many as the pinnacle of code-slinging. That is the truth. It lead me smack-dab into TDD, and I (mostly) refused.

Concept: Unit Test

TDD is built upon the idea of testing, specifically unit testing. We can start by defining a unit test: code that tests code. Take this function for example:

It’s a good idea to write unit tests, because the result is a runnable test that says either a) Add works correctly, or b) Add does not work correctly:

Wait a second… We just wrote five lines of code to test one line? Yes, we did – and for good reason. This example portrays the what of a unit test, not the why. Here are a few reasons that I can think of off the top of my head:

  1. As our code base becomes larger, we can forget exactly what each function is supposed to do. Ever wrote a function called SorryAboutThis()?
  2. As we refactor and improve our code, we can eliminate code that is important. Ever tried to maintain a function called SorryAboutThis()?
  3. As other developers inevitably edit our code, they can unintentionally alter behavior. Ever inherited a function called SorryAboutThis()?

If you’ve ever been on a project that had more than 1K lines of code, more than three developers, or a timeline of more than a few months, then you surely know the benefits of unit testing. It is quite normal for a project to amass more test code than code which is being tested (code-code?). Bottom-line: write tests or your life will be hell.

Concept: Red-Green-Refactor

So now that we have unit tests under our belt we can just write ’em, eh? I would be inclined to tell you: yes, go for it and figure out what works for you. But others would most likely first tell you: no, follow TDD’s concept of red-green-refactor. This concept is all about the procedure used when writing code and it’s simpler than you might imagine… Never write code unless you have a failing test, i.e. red. At which point you write the code needed to make the test pass, i.e. green. Followed finally by your chance to do any improvements to code, i.e. refactor.

For junior developers this process is completely backwards – how do I write tests for code that doesn’t exist? It’s actually pretty simple. From the code samples above, we would write the test for Add() which would initially fail. After that, we would write Add() with the bare minimum needed to make the test pass. We would end by making any improvements needed to Add(), ensuring that tests still pass.

This process is repeated while (true)… sorry, I couldn’t resist. [Note: you can also follow a variant of this process. I prefer red-red-…….-red-green-refactor, wherein you write several failing tests, make them pass, then refactor.]

The Good

In my opinion, TDD brings a one spectacular practice to the discussion:

it forces developers to think about testing early and often

So often, testing falls to the wayside and the product suffers for all the reasons listed above. All of those reasons boil down to maintainability! Forcing developers to test early and often in an environment that fosters education is the most beneficial practice I’ve seen for junior developers (to date).

In my current project (mentioned briefly in the background), I talked about my chance to employ TDD with my team in hopes of reaping the benefits. It’s been easy to see the improvement that our junior developers made on this project. So often, I see code like this:

… turn into code like this:

Take your pick. We’ve wrote some of the coolest code for this project and it’s extremely maintainable due in part to TDD (and other portions of our process which include regular code reviews, pair programming, etc.).

The Bad

Even with the great practices that TDD helps our team instill, I prefer to not use it because it’s simpler not to. At some point, TDD and other great practices reach an education plateau. You gain all the knowledge it offers and it becomes nothing more than a process.

If you write maintainable code that follows the SOLID principles and you test often, then TDD offers you absolutely nothing outside of being a process to follow.

Like I mentioned earlier in the post, all developers are a little different and we each have our own preferences. I prefer to not use TDD because it prohibits my ability to design future code. The process handcuffs developers from thinking far ahead in favor of only letting them write code in small iterations. This leads to TONS of refactoring when you realize that you should’ve wrote something differently.

Conclusion

Overall, I think TDD is a useful learning tool – but that’s it! I am very happy that I gave it a solid chance on a new project. The team had a very successful run with TDD, but I don’t enjoy the process. I challenge you to reflect on how you write code and how you might experiment to improve.

What are your preferences, strengths, and weaknesses? What do you think about TDD? What are your experiences with TDD?

Posted in Professional Tagged with: , , , ,

Lessons from online dating – relationships and instant gratification

Routine

I’ve found that my occupation has a direct correspondence to the amount of new, date-able women I meet in my day to day routine activities. It turns out that certain occupations don’t offer an abundance of opportunities in that aspect.

In all levels of school there are routine interactions with other students. As I grew older and specialized more, I noticed that the amount of interaction stayed relatively consistent but that the diversity narrowed. In middle and high school, I was meeting and interacting with all types of people. In my later years of college, it was mostly restrained to these guys. Obviously not the most diverse bunch. Don’t get me wrong… There is absolutely nothing wrong with being a computer nerd. It just means that I’m not interested in dating you. I tend to think that opposites attract anyways.

You might guess that when I got a full time job with said computer nerds that my interaction diversity didn’t magically increase. You guessed right!

So I have a void space to fill. Most of my routine interactions are stagnant and there is no change in sight. I’m good at what I do… Can you justify changing your occupation just to meet others? Education doesn’t bring me the fulfillment that problem solving does, even if that means being routinely available to the wealth of date-able women.

Occupying the Void

As many reading this post, I grew up in a new age of instant gratification. It is my only reality. My occupation even reinforces it.

The problem that I face in occupying the void is that I’ve never had to try to date. It just happened as a result of my routines. When my routines don’t lend themselves to dating opportunities, then I don’t date – it’s that simple. I enjoy being single but there are certainly times that I miss having a relationship. Eventually I decided to rely on my favorite instant gratification machine, the internet.

When I was younger, I remember thinking that online dating was stupid. I thought I could never be so desperate to stoop to that level. When I first signed up for an online dating site I told myself I was just browsing. The second time I actually wanted to meet aforementioned date-able women.

It was a slow revelation… I wasn’t so desperate to date that I needed online dating. It was just a convenient option that allowed me to short-circuit a lengthy process that was no longer part of my routine: interacting with a diverse set of people.

Ingrained Habit

Some people act uncharacteristically brave when they are behind a keyboard and the cloak of anonymity. I would usually classify myself outside of that group of people. But online dating is a different beast altogether. It allowed me to expose my identity while anonymously judging others.

Even though online dating helped to add some diversity that was missing from my routine, it only did so at a superficial level. I wasn’t actually meeting the women. All I could instantly do was read and see their version of themselves. Somehow that was enough to make a judgement and decide that a women was not date-able. Regardless of how hard I tried, I could not shake the habit of instant gratification.

In real life I reserve judgement of a person. But online dating allowed me to judge someone before even giving them a real chance.

Sometimes I think instant gratification has changed us for the worse. But then I watch TV, play video games, order delivered food, pay bills, and read news while sitting in one place. Clearly instant gratification is only going to advance.

The takeaway here is that you can’t take shortcuts in your relationships – starting or sustaining. The gratification of a relationship comes in the form of a journey. In my opinion, online dating can only help with that if you go into it with the right mindset. Maybe one day I’ll understand that mindset. In the meantime, I’ll continue my old method of not trying :).

Posted in Personal Tagged with: , ,

Secure WCF Service on IIS with BasicHttpBinding and Custom Credentials

In one of my current client projects, I had the requirement to secure a WCF service. That is typically an easy requirement but I had a couple of restrictions:

  • Only BasicHttpBinding could be used on the client-side
  • Client credentials (username / password) must be sent and validated with each request

One option is to send and validate the credentials as parameters to each method. This method is usually seen as unacceptable because credentials are passed across the service as plain-text. Do you want your password sent over a web service as plain-text?

After doing some research, I came up with a solution that is largely a combination of two sources: configuring a WCF service on IIS with SSL and username authentication over BasicHttpBinding… I’ll do my best to consolidate both of those sources for simplicity.

Programming / Configuring the WCF Service

  1. Open Visual Studio.
  2. Create a new ‘WCF Service Application’ project.
  3. Define a service interface:
  4. Implement your service interface. Our  GetData method will return a string that shows the authenticated username and the integer value passed. If the current identity is not authenticated, we throw an exception (this is not our validation method, that is shown shortly):
  5. Implement a custom credential validator. The class needs to extend the abstract class  UserNamePasswordValidator . The important implementation detail here is that you want to throw a FaultException  if the credentials are incorrect:
  6. Edit your web config file. This is probably the most tedious portion of the process. I’ll go ahead and attach the whole file here:

    Some important things to note here… We expose two endpoints – one for the BasicHttpBinding and one for service metadata (mex). We are using BasicHttpBinding  with TransportWithMessageCredential  security (that further specifies a message credential type of UserName ). The service credentials point to our CustomValidator . This is the absolute minimum needed for me to get the web service working – all elements were needed.
  7. Publish the project somewhere local on your machine (right-click project, publish).

Configuring IIS for WCF Service with SSL

  1. Follow instructions in this guide, until you reach ‘Configure WCF Service for HTTP Transport Security’ (don’t do that part). I would list these out myself, but I think the visuals provided in the link are very helpful.
  2. I ended up having some file access issues with my application pool, so I ended up making my application pool run as an administrator identity.

 Programming / Configuring the WCF Client

  1. Open Visual Studio.
  2. Create a new ‘Windows Console Application’ project.
  3. Add a new service reference – use the location of your WCF Service that is hosted with IIS. The metadata for the service has been downloaded and an app.config file has been produced. We won’t use the app.config.
  4. Program the console application to make a call to the service:

Happy coding! If you have questions, leave a comment :)

Posted in Professional Tagged with: , , , ,

Portability: MonoTouch, MonoDroid, and PCLs

In my team’s most recent client work, we’ve been tasked with cross platform mobile development. It is an extremely fun project with an aggressive timeline. Some of the technologies involved so far are:

Beginning Ideas

Use iFactr to programmatically build layers (screens / views) for our application. iFactr works off of the Xamarin framework, so we have the ability to make small tweaks to each version of the application (iOS / Android).

Advantages

  • One code base – multiple platforms: iOS and Android

Disadvantages

  • Quirkiness of two project files with shared iFactr code – setup and maintenance of an Android and iOS version of (almost) identical projects was difficult – think namespace, file link, reference issues
  • Testability of application and business logic – only certain types of projects can reference Xamarin – unit tests only available for iOS and must be run on device (or simulator)
  • Restriction to iFactr deployment platforms (yes, there are several but why restrict yourself?)

New Ideas – MVVM and PCLs

Use Model-View-ViewModel concepts and portable class libraries to expand and better our solution. Move all models and view models to a portable class library, along with custom defined application service interfaces. Implement services in the same project, but have the ability to later leverage dependency injection for a modular solution.

Advantages

  • One code base – more platforms: iOS, Android, Windows 8, WinPhone, WPF, Xbox360, etc.
  • Testability of application – standard MSTest projects that reference PCLs to test functionality

Disadvantages

  • Learning curve – setting up a PCL for MonoTouch, MonoDroid, and .NET assemblies is not a trivial task – there isn’t a step by step guide out there

As mentioned, there isn’t a step by step guide anywhere but I did find some extremely helpful resources from this blog by Stuart Lodge.

I’m happy with where we’ve taken the solution. I plan to continue learning about PCLs and portability in general. My goal for this year is to make some type of applications that ports to all the platforms listed above (and possibly more).

Posted in Professional Tagged with: , , , , , ,

Texas A&M – Computer Science – Industrial Affiliates Program

Last month I had the pleasure of attending the CS department’s industrial affiliate program (IAP) for Texas A&M. One of my colleagues from Pariveda Solutions, Dave Morris, accompanied me during the two-day event. When you’re done here, you should go to Dave’s blog and encourage him to start writing!

As the IAP’s site says, it was developed in 2004 to improve the department’s relationships with industry. The program has evolved over the years and is now an excellent method for the industry to:

  • Learn more about the department
  • Meet professors and hear about their research
  • Meet undergraduate and graduate students, as well as see some of their current work

I had a good time at the IAP – it is always fun to go back to College Station. This was my first time attending the IAP but I’ve been to other industry events like the SEC career fair. After becoming accustomed to being the student in this scenario, it has been a fun experience being on the other side of the table.

My favorite part of the trip was the time that I got to spend catching up with some past professors, namely Dr. Leyk, Dr. Caverlee, and Dr. Schaefer. Each of these professors played a key role in helping me refine my passion for technology and programming.

Overall, the IAP was a good time and I look forward to attending again.

Posted in Personal, Professional Tagged with: , ,

Why Texas is the best state ever

No state income tax

It’s great – I love Texas for the simple fact that there is no state income tax. Being a grown-up sucks sometimes. Texas makes that easier.

Outside of tax simplification, here are other reasons that I can think of for Texas’s dominance:

  • Everything is bigger here
  • Generally good-looking women
  • Mexican food
  • Economy
  • Mike Jones
  • Weather

The main point of this post is to bitch about taxes (and government indirectly). If you’re in the mood for first world problems, please continue reading…

Rant

taxes

Every time I file my taxes, I want to punch Uncle Sam in the face. That is putting it pretty lightly, too.

I just wrapped up the rage session of filing my taxes for 2012. This year my amount owed almost doubled from last year. According to my preliminary calculations, I owe an amount which is equal to a whopping 1.5% of my annual salary. What?? I don’t get a return… I owe money. Uncle Sam, I thought we were buddies…?

Yes, I am going to check my calculations at some point. But I need to let my blood stop boiling first. Maybe that 1.5% number seems small?

Come on Brett… You just have to pay a small percentage of your annual salary to the government. They do so much for you, so I’m sure you can manage to give this small amount.

Let’s put that 1.5% into perspective: I get paid bimonthly, (basically) max out my investment options, and withhold the recommended amount for my salary. Those three factors combined mean that 1.5% of my annual salary is equal to roughly half of a paycheck. For me, that equates to about two months of rent and utilities.

More rant

OK, so I paid a decent amount of money throughout the year and now I have to pay a large lump sum of money. I can get over that I guess. But the least Uncle Sam could do is provide some lubricant. I mean, really… Who has ever used TurboTax? They draw you in with the simple wizard-like interface and importation of your W-2.

Don’t worry, we’re TurboTax. We’ll make sure that you get screwed out of the most money possible. And please pay us for helping you pay your good pal Uncle Sam.

One minute, you are flying through your tax “return”. The next minute, TurboTax asks you for line 48b of form 14918394ASFN-LAH from 3 years ago. No problem, I’ve got that in my back pocket…

Sarcasm aside, I realize that TurboTax is a great tool that is making the most of a bad (read, dog shit) situation. How did filing taxes become so complicated? I consider myself to be at least of average intelligence and filing taxes is still really confusing to me. And I have a very simple situation (single, no property, etc.) as far as filing taxes is concerned. That is a problem, America. Can we really expect the general population to file their taxes without help? Nope.

Enter IRS. I don’t even want to touch that…

Fix it

To be honest, I didn’t start writing this to share solutions… I just wanted to cry a little bit.

But low and behold: FairTax! Here are some highlights outside of simplifying the complex, broken tax system:

  • Keep your entire paycheck
  • Everyone pays fair share
  • Pay tax only on what you spend
  • IRS no longer needed

In my opinion, this is something that Democrats and Republicans could back. Everyone has to pay taxes. And I don’t think anyone is happy whilst doing so:

taxes

Posted in Personal Tagged with: , , ,

Subscribe to my Insights via Email

Join 9 other subscribers