Archive for the ‘Miscellaneous’ tag
From today’s New York Times, Microsoft’s new CEO on leadership. [Emphasis mine.]
Q. Your company has acknowledged that it needs to create much more of a unified “one Microsoft” culture. How are you going to do that?
A. One thing we’ve talked a lot about, even in the first leadership meeting, was, what’s the purpose of our leadership team? The framework we came up with is the notion that our purpose is to bring clarity, alignment and intensity. What is it that we want to get done? Are we aligned in order to be able to get it done? And are we pursuing that with intensity? That’s really the job.
One of the best skills you can teach yourself to get ahead in your career is SQL. In a world so driven by data, being able to pull your own data is very empowering. It’s also a way to get ahead. People who can pull their own data are less reliant on others.
At Rover.com, we’re teaching all of our people, from customer service to marketing to the CEO, how to run their own SQL queries. We have a read-only version of our database, so that anybody in the company can pull their own data and run their own reports.
How can you learn SQL?
It turns out that SQL is more mysterious and scary than difficult. The basics are really very simple, and you’ll pick up 80% of it in a few hours. It’s like music: there’s only 14 notes in a scale…the magic comes in how you put them together.
A quick search for “SQL tutorial” or “learn SQL online” will yield plenty of results. Here’s a few that I found:
As background, SQL stands for “structured query language”…it’s the language used to get data out of database server or RDBMS, i.e. “relational database management system”.
There are many database servers, but the most common are:
- Microsoft SQL Server — runs on Windows
- Oracle — mucho $$$$
- MySQL — open source
- SQLite — open source and super light weight
You may need to install a DB in order to learn from the tutorials.
SQLite is insanely simple and easy to use. It’s just a text file that gets treated like a database. I don’t even think there is a server to install, just a client. The client I personally use is RazorSQL.
If for some reason SQLite isn’t robust enough for the tutorial you’re working on, then you’ll want to get MySQL. It’s free. For that, you’ll need to install the database server (MySQL) and a client tool (called MySQL Workbench). A lot of companies use MySQL (including Rover).
SQLite is used a lot too, but mostly by developers who embed it within an application. That being said, from a “learning SQL” perspective, you’ll learn the same with each of them.
If you’re learning, don’t bother with MS SQL Server or Oracle. They’re overly complicated for your initial needs. If you know how to query SQLite or MySQL then jumping over and learning how to query those databases is easy. Conceptually, they are the same, though there are semantic differences, but nothing that you wouldn’t figure out quickly. For example, in MySQL you get the current time by typing “Now()” and in SQL Server it’s “GetDate()”.
Most importantly, have fun! Remember, you’re only a beginner, so it’s going to be difficult at first. But, with lots of searches, you can usually get all your questions answered!
Wanna get ahead in your career? Here’s how…
Be a person who takes things off your boss’ plate.
Your boss might be internal…like you work at a company.
Or, they might be external…like a client.
Like you, they have too much work to do. So, be a person who makes it so they have one less thing to do.
It goes for more than bosses. Works for co-workers too.
Of course, you can’t always be the person to make work go away, but you can help someone make it go away on their own. In other words, you don’t always need to take things off their plate. If you’re a person who empowers people to get stuff of their own plate faster, then the same axiom applies.
Now, consider the opposite: someone who, by asking them to help you, actually puts more work on your plate. Who wants to work with a person like that?
I’ve worked with many over my career. When I ask for help, the work this person does creates more work for me.
For example, all the code they write, I have to double-check it because they don’t show attention detail.
Or, the reports they run create more questions than they answer, so I have to ask them to dig further to get to the bottom of the issue.
This person doesn’t take work off my plate. Rather, they just fill up my inbox with emails that I dread reading…
…because I know it means more work for me.
In business-speak, you hear employers want “problem solvers”. I think when people say that what they mean is, “people who can take work off my plate…because my problem is too much to do.”
If I’m doing something for someone else, I want to reduce the burdens on them, not add to them.
This doesn’t mean that I never ask someone to do something for me…because we all have to do that in life. Nobody can get through life without a helping hand.
Rather, it means the opposite: when someone else asks me to do something for them that I take the burden completely off of them…and not just put more burden on them.
A friend of mine sent a message to an handful of friends today:
I got my first phone interview lined up and I’ve never done this before. I would love some pro-tips on making it successful.
I’m not sure if these are actually pro-tips, but here’s what I offered:
1. Have a piece of paper and pen in front of you.
2. Take a moment to think before answering.
3. Don’t be afraid to respond to their question with a probing, clarifying quesiton…so that you can answer it more in line with what they want.
4. Be yourself, you’re awesome as you are!
What would you have suggested?
I had coffee with a friend who recently entered the staffing agency business. His company has several hundred developers on staff, and each of these have been technically vetted. So, the idea is that a company can easily increase its engineering resources by calling up and saying, “Hey, we have a new project and need <insert some number> engineers next week.” Yes, you will pay a higher rate for the resources, but you’ll get them when you need them, and don’t have to incur the ongoing cost of full-time employees after the project is over.
Naturally, he was asking if Rover could use his services. Yes, we are hiring, but no, we are already working with some recruiters, and are not going to add any more at this time. (Hint: recruiters, don’t call…I’m not going to hire you right now.)
The conventional wisdom is that startups and young companies don’t want to hire through staffing agencies because of the higher costs. In part, that’s true, but it’s not the real reason. Most companies would gladly pay an extra cost for great developers immediately.
The real reason is that a young company like Rover isn’t well-suited to use staffing agency resources. How are we not well-suited? Let me count the ways…
There is a big cost for us to bring a new employee up to speed. As a young company, our software isn’t well-documented and we have yet to establish robust, yet efficient, training programs. Part of value of a staffing agency is that you can get the developers quickly, but you can release them easily when the project is over. Yet, we have to invest in a new employee which means we want them to be here for a long time in order to recoup that investment. In other words, the “releasability value” isn’t valuable to us.
One of the things that helps new engineers be productive quickly are thoroughly written product specifications. Startups are notorious for not spending a lot of time on specs. Often, the entire spec is a just a sticky note, for example, “Add promo box on checkout”. What? There is no way a new engineer to know what they should do. In that case, the engineer needs to be familiar with the system, so now we’re back to the “up to speed” problem. Or, to get the “quick availability value” the company needs to invest in writing more detailed specs, and that further increases the costs.
Soooo, who then, are technical staffing agencies good for? This is what I talked to my friend about this morning, and I thought I’d share those ideas to get your thoughts. (I’m curious to hear what my recruiter friends have to say about this.)
Scott’s ideas for questions for technical staffing agencies to ask of firms to see if they might be a good fit:
1. Obviously, companies that spend a lot of time on product planning and specifications will be more suited toward flexible resources. So, asking about the planning process, the number of planners (i.e. product, project, program managers), asking about the importance of details specs versus agile flexibility…these are good things to find out if you’d be a good fit.
2. Ask if the company’s software uses a “service-oriented architecture”. An SOA is a type of technical design where components of the system (i.e. services) are completely independent and only interact with other services via an API. (An API is a pre-defined programming interface that allows computers to talk to each other.) An SOA provides a lot of flexibility to the stuff behind the API; as long as the API does what it’s supposed to do, then it doesn’t matter how it gets done.
For example, if there is an email sending service, as long as other software components can connect to that service via the API and the emails are sent it doesn’t matter if you have fancy software doing it or a bunch of hamsters. All of that is hidden from the outside.
An SOA has a number of signatures that indicate it’s a good fit for flexible staffing resources. Since an SOA relies on APIs, and an API is a pre-defined interface, then that means it requires a thoroughly written spec. You know who else relies on a thoroughly written spec? That’s right…developers from technical staffing agencies.
Additionally, the independence of each service in an API make it easier to test. As I said, as long as the service does it’s job, it works. In other words, the internal quality of the system is less important because it doesn’t impact the whole system.
Finally, an SOA is language-independent. You can write your service in C++ and I can write mine in F#, Z-flat or Q-minus. All of the services will communicate via a common mechanism, so the language doesn’t matter as much.
3. Ask if the company uses a “message bus”. I guess this is just another flavor of SOA. In other words, a message bus is a signature of an SOA. So, if you’re a technical staffing agency, asking if they app uses a message bus is a good thing to ask.
Now, if you’re a sales guy at a technical staffing agency, you might not have the chops or nerve to just ask, “Do you use an SOA?” Maybe a better approach is to say, “I’m trying to learn more about system architectures because I think that will help me better serve my clients…what’s your system like?” Or, “I’ve heard this SOA buzzword…can you explain that to me?” Or, of course, you could just read and get the chops.
So, thems be my thoughts for the day….whaddya think?
Olivia: One thing I’d add to your post might be that you have to go into iterative efforts fully open to the fact that the “Loop” step might mean you took at wrong turn and need to stop and/or kill what you’ve done. Otherwise, you wind up with Winchester Mystery House product and resources spent supporting worthless crap. And killing something off is suuuuuuper hard to do, from what I’ve seen. But it’s part of that whole “committing to the Loop”…that’s the toughest part.
Me: I’m not a good killer. I love all my children.
Olivia: Yeah, it’s really, really hard. There’s always the question of “Is this not working because it’s a bad idea?” or “Is this not working because we didn’t sink enough time into making it a kickass feature?” But research should point you in the right direction, ideally. If you’ve got time to conduct it. And no crazy backlog of features that your CEO wants “right now right now!” to deal with. And killing stuff off is logistically painful. “Hey users, remember that feature we put out? Well, not enough of you like it so we’re ripping it out. LOL!”
Last winter, I stopped working with cats, and started working with dogs. Currently, my primary responsibility at the dog company is to recruit and hire top talented software engineers. The market in Seattle for software engineers is very tight.
Seattle is probably #2 in the country after Silicon Valley for technology companies. Not only do we have Microsoft and Amazon here, almost ever major player in the industry has setup a development center Seattle. Google, Facebook, Yahoo, eBay…they’re all here. There are billboards on the street advertising software developer job openings, and the other day I actually saw a truck driving around town with a big billboard on back.
It’s hard for small companies to break through and find good developers, and my company has had to resort to a gimmick to break through the noise: Rover.com is giving away a free puppy to anybody who refers an engineer. In addition, I’m spending a few nights every week going to meetups for different types of special interest groups, just to meet developers and put the word out.
Frankly, it’s crazy, and here’s why. I park my car about 3 blocks away from where I work, and on my short walk to work I walk by a homeless shelter. It’s not even an overnight shelter…it’s a day shelter where men and women can take a shower, wash their clothes and hang out indoors for awhile. So, on the one hand, we have companies begging for a people to come work for them, and on the other we have people who can’t find work, home or food.
This situation reminds me of John Edwards, the disgraced presidential candidate from a few years back. He campaigned on the notion that there were “two Americas” and he was right. There are Two Americas, and they’re not Red State and Blue State Americas. It’s t he Haves and the Have Nots. Everybody in this coffee shop where I’m writing these thoughts in the lives in the Haves America. Two doors down, at the day shelter…welcome to the America of Have Nots.
Three closing thoughts, and things to read:
- Read these posts (here and here) about hating your job. Hmmm…maybe the Communists or Bolsheviks or Marxists or…I don’t know my history well enough to say exactly which group…were on to something.
- Have you been following the Rogoff and Reinhart economic analysis error? Long story short: calculation error in an Excel spreadsheet leads countries all around the world to make poor decisions that prolonged the recession after the 2007-8 financial crisis.
- Most importantly, the consequence of those decisions: a new underclass of long-term unemployed. It turns out that employers discriminate highly against people have been out of work for more that six months. Krugman pulls the points together nicely here.
I was in an office under NDA when I saw this on the wall, so I can’t disclose where I took the pic. Unfortunately, I can’t seem to find a copy of the paper online. (If you can, please post a link in the comments.)
This is going to read really harsh. I’m just being as succinct as possible.
“If you’re running a web site, your users are going to find bugs faster than your testers.”
Really? At what rate are you shipping bugs? More than one person can find in 8 hours a day 5 days a week? Damn.
“They run more configurations and use cases than you ever will.”
And more than I will ever care about. 90-95% of my users are on four browsers. Why are you even releasing features for such marginal returns? Ever notice many bugs will remain in production for months (or eternity)? If that “feature” that’s broken was really necessary I’d expect the fix to have been prioritized quicker.
“If you’re using TDD, then what will testers do?”
This is an interesting point to consider. If you use TDD are you guaranteeing the system works the way the developer intended or the business owner? Your question implies it will perfectly match the intent of the business.
Also, you’ve still got the role but you’ve just tacked it onto what you expect your developers to do. Where does your pessimistic force come from?
Does 100% TDD mean important exceptional cases are necessarily covered? (Think null conditions, exception handling, slow databases, etc.).
“Manual testing doesn’t scale. Think about it logically: the quality of manual testing gets worse as a product grows.”
This makes it sound as if the quality of ONLY manual testing gets worse as a product grows. Also manual testing does scale… but it’s expensive. To your point, the longer the feedback loop the more expensive it is to have a bug. Furthermore, every run of manual testing costs MUCH MUCH more than automated testing.
The quality (false negatives/no bugs found when they do exist) of manual testing getting worse as a product grows implies that this doesn’t happen with TDD. However, I’ve personally seen that it gets harder there as well. Done improperly, your automated tests can make your system brittle and harder to refactor (and lower costs in other ways).
“Using testers lengthens your feedback loop, yet short feedback loops are critical for quality software development, so how does that make sense?”
I read this as you saying, “Using manual testers causes your short term costs to increase X%, yet automated tests only increase your costs Y%”. Until you have those numbers this is an inadequate argument.
“short feedback loops are critical for quality software development”
Are there no examples of businesses using longer feedback loops making quality software than businesses using shorter feedback loops? I guess those guys going to the moon all died.
“Using testers promotes a waterfall mentality, and doesn’t promote code ownership.”
Here you’re using a logical fallacy called “Appeal to the people”. It’s very popular to deride waterfall. But waterfall was never the problem, it was choosing waterfall when it was the inappropriate tool for the job. Given that a start up’s goal is to find a sustainable business ASAP, and that no plan survives first contact with the customer, I think it’s safe to say it doesn’t work for most start ups.
From a psychological perspective, as a developer, knowing that you’re “flying without a safety net” is a giant motivator for encouraging thoroughness and attention to detail.
There’s no safety net? I thought we were assuming all of the developers TDD all the things they can think of?
My point is that this dichotomy you’re creating enforces the mindset that these tools are mutually exclusive. It’s a false dichotomy. Someone does need to be your quality champion. They need to push all your developers to TDD everything they can think of. They need to help think of bugs from a higher level perspective. Sometimes a developer’s nose is too close to the grindstone to see the whole workshop is actually on fire. In those times, you need less grinding and more water.
To be fair, I’ve never seen this happen either. From personal experience I know TDD isn’t a panacea either. 🙂