5 ways to get to the top of your field

Have you just got the basics of a new skill and are now interested in ramping it up to professional level? Great then this article is for you!

All seasoned developers know that a key to thriving in our industry is to develop the skill to properly process new information. This skills has four steps ie:

    - Recieve information
    - Understand it
    - Process it
    - Apply it

On this entry we will only talk of the first step, you may want to look at this entry So you want to become a master developer? for the other steps.

Fire up the hose

In the sea of information that we live in, it is easy to loose track of what is important, however the following key sources always deliver.

Top blogs

Identify key players in your industry and follow their blogs. Most will send you newsletters, signup for that, if that is not available you can leverage Google Now or any other content aggregator.

Due to my busy schedule, I find Readability to be an especially potent tool to manage my reading schedule, may also work for you.

Follow key people

Unless you are in the music industry, the likes of Beyonce should not be in your list of key people. I am talking about influencers in your field. This maybe Taylor Otwell in the PHP community or Obie Fernandez in the Rails world.

By following them both on twitter, github or any other platform that they choose to express themselves, you will get the latest on what is happening in the domain.

Forums

I am willing to bet my last shilling that you have at one point or another found the solution to your problem on http://stackoverflow.com/, but I would not hazard the same that you have contributed to it.

By keeping an eye on new questions coming in to such forums you not only quickly gain knowledge on your field, you also establish yourself as an expert in the domain.

If you are unable to spent as much time on this task, check out CodeTriage, this guys will send you an issue a day to solve on your inbox, pretty cool right?

Local user groups

Don’t let the position of this entry fool you, this is one of the important tasks you can do. User groups present to you a unique opportunity to interact with people in your field who also operate under the same business environment as you do. This means that in addition to knowledge and skills you can also get tangible benefits like a job or contract.

Start from http://www.meetup.com/ look for your target group and join join join!

Conferences

In your next review, consider requesting your employer to sponsor you to go to a conference in your domain. The costs are usually neglegible and the benefits gained both for you and your employer massive. I will let Chris Marr expound further Why attend industry conferences, seminars and events?

If however you can not make it to attend such conferences, you can probably find slides of it from sites such as Slideshare or SpeakerDeck. Video recordings are also usually available in YouTube or Vimeo.

MOOCs

Courses valued at thousands of dollars are available for absolutely free from organizations like Coursera, MIT, Harvard etc. It is insane not to aggressively cash in on all this freebies!

Commit yourself to at least one course every half year or so, the fruits will be worth it.

Turn down the hose

While all this new information is fun and exciting, it will eventually start eating into your professional and personal life. To get some work done you eventually need to down the hose of information down to a manageable level.

Remember your clients pay you to build them software, not to attend conferences.

How do you manage your own flow of information? Talk to us in the comment section below.

Facebooktwittergoogle_plusredditpinterestlinkedinmail

So you want to become a master developer?

Done with your first two projects? Great! What we are going to discuss today is the one fundamental skill that is guaranteed to take your skills to the next level.

I am sure you already guessed it, that is practise.

Before proceeding its important to clarify what practise is NOT working on a project for a client is not practise, that is work. In fact if thats what you do, please open up a new tab and quickly fire an apology to all the clients whose money you have been wasting!

Practise is an entirely different beast, Geoff Colvin in his book Talent is overrated talks of the following characteristics of practise or deliberate practise as he calls it.

Its designed specifically to improve performance.

Keyword here is designed, this requires knowledge about how performance is developed and improved.

This means that you likely need a teacher to help you in your practise sessions. However it is essential that with time you become good enough to design your own practise.

If you are looking for a nice school to join try Moringa (Disclaimer: I train at this school)

It can be repeated a lot

Unfortunately humans are not Write Once. To get better at any task you need to repeat it a lot. This means that the tasks carried out in the practise routine must be inherently repeatable safely.

It is highly demanding

If you find yourself in flow, you are probably not practising. In fact it is physically impossible to carry out practise for more than 5 hours a day and for more that 1 hour a time. This can act as a useful guideline to know if what you are doing really is practise.

It is not fun

Unfortunately practise is no going to be a pleasurable activity. I will let Emeka Mbadiwe explain the concept

Practising like a chess master

It’s not always possible to get a teacher, but thats no excuse to not practise, we can borrow a leaf from the world of chess.

Professional chess players practise by studying positions of pieces for different games played in the past.

The positions are organized by various themes including

  • Openings
  • Attacks
  • End games
  • Defenses

They then compare the move that they would make in this position vs the move that the master made.

We can modify the process to use in our own profession.

Steps

  1. Look into requirements specification, an implemented RFC or popular algorithm. Check this book by Dr. Sedgewick Algorithms for inspiration
  2. Write out your own implementation of the algorithm
  3. Look for an implementation of the algorithm, if you are using Sedgewick’s book, you will find code samples.
  4. Evaluate the proposed solution against your own
  5. Note the differences between what you did and what the authors did
  6. Rinse and repeat

You can use this method to analyze other aspects of software development as well including:

  • Design patterns
  • Specification drafting
  • Scheduling
  • Deployment
  • etc

Point is to identify gaps in your existing skillset and subject them to the rigors of practise.

How have you designed your own practise? Talk to us in the comment section.

Facebooktwittergoogle_plusredditpinterestlinkedinmail

Checklist of what to measure in APIs

You have gone through the trouble of building your API, testing it and then deploying it and now you are wondering what next? Well next is to measure it of course!

Tom DeMarco wisely stated “You can’t control what you can’t measure”, this is true even in API development but to expound further, good metrics help you:

  • Identify bottlenecks in your API
  • Better manage spikes in connection
  • Setup a better plan to manage capacity
  • Troubleshoot issues as they arise

Non technical issues also benefit from good metrics, it is far better to tell your boss “Our traffic currently averages at 1000/sec with about 25% of our users still consuming v1” rather that “We are ok”

Hopefully I have convinced you of the merits of recording numbers for anything and everything you can imagine.

Below is a list of things that you can measure, this is not meant to be comprehensive but more of a checklist just to make sure you have the basics covered.

  • HTTP Status Codes: You need to know if your clients are getting the data they need
    - 100s Informational requests
    - 200s Successful requests served
    - 300s Redirects 
    - 400s Client made a bad request
    - 500s Something is wrong with your application
  • Signed requests: The number of requests to protected resources
    - Tokens issued
    - Token refreshes
    - Auth successes
    - Auth failures
    - Auth grants
    - Auth rejections
  • Client data: Number of requests related to managing data of users
    - Clients created
    - Client usage
    - Client type
    - Client location
    - Version used
  • Resource usage: so that you can know when its time to upgrade
    - DB Queries
    - Memory usage
    - CPU usage
  • Response times: we all want a snappy system
    - Response time for authorization requests
    - Response time for general requests
    - Response time for different versions

Tools

Thankfully a whole host of tools exist for helping you to measure this information

There are a lot of them in the market choose what best works for you, personally I use New relic

How do you measure your own metrics? Tell us in the comment section below

Facebooktwittergoogle_plusredditpinterestlinkedinmail

Faster load times for free

What if I told you there exists a simple method to start saving money on servers today and that takes only one line of code to implement would you believe me?

Well welcome to the world of headers, for followers of my blog this is more like an expansion of what we had talked about a few months ago Using status codes and headers

In this entry we are going to talk about the headers that we can start using to reduce server-client communication immediately which has the double benefit of

  • Saving your customers especially those on mobile data charges
  • Reducing the work your server needs to do

Etag

The Etag provides a unique representation of the response issued by the server. It is usually a short string that is of meaning to the server. You probably already have unique ids for data entries in your application, this would act as good targets for an etag if however entries are editable you may choose to use a hash of the content.

\\Code example in Laravel PHP

$etag=md5($content);

return response($content)
            ->header('Etag', $etag);

If-None-Match

An Etag is not of much use if the client doesn’t make use of it. The If-None-Match header allows the server to return appropriate responses for the data if content still there.

use GuzzleHttp\Psr7\Request;

// Create a PSR-7 request object to send
$headers = ['If-None-Match' => '897696a7c876b7e'];
$request = new Request('GET', 'http://yourservice/blogs/57', $headers, $body);

Cache-Control

This instructs the client and all other downstream services if the content can be cached.

The main settings for it include:

  • private Instructs cache is specific to a user
  • public Can be cached for use by all clients
  • no-cache Client must re validate all requests
  • no-store Client should not cache anything at all

There are more settings and you should check them out http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html


return response($content)
            ->header('cache-control', 'private, no-cache');

Expires

Nothing lasts forever, even data. As such makes sense to inform clients of best by date for the data they have cached. In modern browsers you could use max-age control in the cache-control header.

#Example for django

response = HttpResponse()
response['Expires'] = "Thu, 24 Sep 2015  12:00:00 GMT"

Vary

As you get more sophisticated in your caching techniques it may now be time to start using the Vary header. The header allows clients to know if they have valid content based on some condition.

The most obvious example would be if you serve different content for mobile and notebooks then the browser should first check if the cached content is of the same user agent

#Example for ROR

response.headers["Vary"] = "User-Agent"

Conclusion

It is important to note that not all clients respect headers but for those who do, you would be doing yourself and them a world of favor by providing them with appropriate headers

Will you be implementing the headers we have talked about? Talk to us on the comment section below.

Facebooktwittergoogle_plusredditpinterestlinkedinmail

Metrics on quality of software

Quality is a term loosely used in the world of software development. I would be hard pressed to mention a project in which quality of the product we we’re building was not mentioned many times over. And while clearly I work with a super team we would be hard pressed to define what quality software actually is having long settled on the I will know it when I see it camp.

Still it does make some sense to at least see what informs our decision making. So lets start

Who is responsible?

The phrase the buck stops here has as much weight in technology as anywhere else. The management believes that quality should come from the developers and the developers believe it should come from management. The truth is, both parties play a critical role in the delivery of a quality product.

    Developers: Software is highly technical, the burden of ensuring its quality rests squarely on your head, this is why you are paid.

    Managers: We developers are not good neither do we care to be good in corporate politics, your job is to enable us do our job by paving the way and then getting out of the way.

Metrics of quality

Despite the amorphous nature of quality, there are still some measures which we can use to get a rough outlook on the product you are building

  1. Reliability

Your product should do what it was built to do dependably. I have put this particular metric as first on the list because if you do not achieve this then nothing else is worth measuring.

Think about this the next time you have a two hour meeting to discuss if the logo should be placed on top of the page or at the bottom.

  1. User Experience

The end goal of all software is to serve humans. I know humans are not nearly as cool as the tech your working on, but every once in a while make sure you have some of them actually using what you are building. You may be surprised at the insights you gain.

  1. Maintainability

Most of the time we spend on software development is on the task of maintaining it. In fact almost all design principles are written with the explicit goal of making it easier to make changes to existing code base or adding new features.

  1. Efficiency

I am saddened by the number of engineers who seem to believe that optimization is yesterdays problem. To this engineers a rude shock awaits them if ever their product is mentioned in a popular outlet such as hacker news.

And even if you have the money to quickly scale up your services perhaps that money would have been better spent elsewhere/

What are some of the measure you use in your own shop? Talk to us on the comment section below

Facebooktwittergoogle_plusredditpinterestlinkedinmail

Five reasons to build a CLI for your web app

As web developers, we tend to focus mostly on the web side of the application, and for good reasons too, good UX should be on top of your priority list.

However, it’s important to remember that the developers and maintainers in your application are also users and you need to take care of their experience. And how do you get to please developers? You come as close as possible to their environment, i.e add a command line interface to your application!

Adding a command line interface to your web application has several great advantages as listed below.

Re-usability

The most obvious interpretation of this arises from the fact that you can use your application in multiple environments. However most importantly your application can now be used as part of a bigger application without any need to modify it! Read this to understand why this is important

Maintenance

Application maintenance tasks tend to be rote, unless your audience are brain dead, please spare them the agony of this tasks by providing easy automation switches. This can be as easy as adding tail to all requests or as complex as a command to run a self healing module in your application.

Script-ability

As a dev shop you can not possibly anticipate all the uses your application can have to your users, developers or even future self. Adding a TUI enables a user to script a sequence of commands in your application to cover use cases that you did not think possible.

Access

Lets face it, your web application will likely go down at one point in its lifetime. In this critical time, you really want to still be able to access it and even better run admin tasks.

Speed

It is infinitely quicker to carry out tasks on the command line than equivalent tasks on the web interface. For end users the pain of learning to use a TUI far outweighs this benefit, however most developers are quite at home in this environment, spare them carpal syndrome.

Good news

The good news is that all major frameworks provide an easy way to build out your CLI.

  • Laravel Artisan
  • Django Admin
  • Rails runner

Will you be implementing a cli in your next application? Tell us in the comment section below.

Facebooktwittergoogle_plusredditpinterestlinkedinmail