Tag: software development

  • Keeping Unique Aliases

    I am a big standards guy. Not any particular standards, but ensuring you have some in your organization and that people stick to them. Pascal case, Camel case, it doesn’t matter to me. I’ll build a habit with any of them; I just want some consistency from others working in a team. Or even across teams since people move to different projects over time.

    I ran across another post on naming conventions, this one looking at SQL standards, and it’s a practical look at a few things. I like some of the ideas, like the singular or plural choice (” Who cares. Just pick one and use it consistently. “), but I especially like the idea of the third item: standard aliasing.

    In the past, I’ve often found that I used the same aliases over and over. When I was the only DBA, this ensured consistency. “P” was always for dbo.Product, and pc was always used for ProductCategory. However, when we added other team members, I quickly realized we didn’t use the same conventions. I’d check out code and see prod.productid instead of p.productid. The new people didn’t like my single character aliases and I didn’t like typing most of the word for theirs.

    Ultimately we had to decide what made sense for both of us and compromise. We choose specific items, not all at once, but as needed. We’d have a 30s meeting or exchange a quick chat message and then update a document with the standards. When other new developers were hired, they already had a reference list that they quickly learned.

    I think the idea of standard aliases makes sense. It’s built into SQL Prompt and some other tools, precisely because many teams want to ensure their developers adhere to a standard, and more importantly, can quickly understand any code they pick up. That’s the real reason for standards: they convey information, silently and quickly.

    Steve Jones

    Listen to the podcast at Libsyn, Stitcher or iTunes.

  • Teams That Ship

    These days there is pressure on many software development teams to ship software more often. With the growth of DevOps and the numerous stories about companies that update their applications regularly, more managers are putting pressure on their development teams to perform. This can be a challenge as the culture changes needed to alter the way we work and achieve frequent updates are difficult to achieve.

    I saw a post from an entrepenuer, Naval Ravikant, on building a team that will ship software. This is advice for a startup, which often has different goals, challenges, and structure than more mature teams. Certainly I’ve seen the way we’ve built software at a few employers change. Even at Redgate Software, what we do to build software wouldn’t the same as what we did as a small company with 10 people.

    As I read the list, I can imagine why some of this advice is there. The need to push forward and get software working and in front of customers is strong. Sales, marketing, and certainly the users of the application want to see things move forward, features added, bugs fixed, and a reason that someone will pay money for the software. This rapid pace requires some decentralization, some lack of control, and trust in your developers.

    However, at some point this isn’t the model that a more mature organization needs. While we do want people that get work done in small teams at Redgate, we’re also more mature. Allowing developers to work on whatever they want isn’t in our best interest, and it could mean some products wouldn’t get any attention. We also have somewhat large codebases, so a person per project isn’t ideal. In fact, we often get code done in groups.

    I think I might be more inclined to adapt some of these goals with a startup, and certainly in a PoC or early access/beta product. However, once clients are invested and paying, I think a little more coordination and collaboration is likely needed. Not a lot, but a little.

    Steve Jones

    Listen to the podcast at Libsyn, Stitcher or iTunes.

  • Looking Back

    Things always go wrong. Those of us that build or operate software know that we will have failures at times. These could be while applying a patch, deploying a new system, during a spike in traffic, or perhaps just a mechanical failure somewhere. Most of us fix things and move on, as there’s always plenty of other work.

    In a few organizations in which I’ve worked, whenever we had a large issue, we had a retrospective. I think we defined large issue as a VP or CTO become involved, but in any case, we sometimes had to have a retrospective meeting on why things went wrong. Usually these weren’t blameless, or psychologically safe. They didn’t end up being good meetings, nor did they serve to prevent future problems.

    In today’s software world where we want to adopt DevOps and build better software, we need retrospectives, both when problems occur, but also periodically as we finish major portions of work. We want to learn and become better at building software, so it pays to spend some time actually assessing how we work as a team. I ran across a post from Thoughtworks that talks a bit about how to make these better.

    I don’t completely agree with the post, and I certainly think that a retrospective won’t solve all the issues we’ve had. Nor should it. I really see the growth and adaptation of a software team as taking time. When we find lots of problems, the key to making the software development process better is to decide on something to change and try it.

    I’m all for an evolutionary approach for a couple reasons. The first is that change is hard and disruptive. If we can change just one or two things, then most of our work continues forward. I don’t want a new set of coding techniques and a new build process at once. The second thing is that any change we make might have other consequences. We see this constantly in the world. We try to alter one thing and other parts of our process change. If we change too much at once, we might introduce lots of other problems.

    Let’s grow and change in small ways, but do so on a regular basis. This is both for the way we work as a team and get our software to customers, as well as the techniques we use to write code. Let’s code better, refactor older code when we can, and learn to improve our skills and techniques each month. We’ll have a healthier code base over the long term and a healthier team as well.

    Steve Jones

    Listen to the podcast at Libsyn, Stitcher or iTunes.

  • Moving to a New SqlClient

    DotNet developers, if you’re using the System.Data.SqlClient, stop. Move over to Microsoft.Data.SqlClient now.

    It’s easy to do, well, it’s relatively easy to say that. The actual work isn’t that hard, but it can be a challenge to move assemblies. In any case,  you need to reference the new assembly in your code, and ensure you’ve downloaded the NuGet package.

    Vicky Harp wrote a piece introducing this new provider, and you can find plenty of posts around the Internet (and videos) that explain how to change and why.

    Essentially, when you have the new assembly, you change this line:

    Using System.Data.SqlClient;

    to this:

    Microsoft.Data.SqlClient;

    If you haven’t fully qualified the assembly at the top and did it in code, you can search and replace.

    The big reason for the change is to allow the ADO.NET provider to release quicker and keep up with changes in technology. When the SqlClient has shipped with dotNet or dotNet Core, it upgraded rather rarely, and the pace of change was disconnected from features being added to SQL Server. Now Vicky’s team has responsibility here and is upgrading this at a more rapid pace.

    Let your friends know, and if you see System.Data.SqlClient in a code review, consider trying to refactor that out.