What skills doth a good developer possess?

This is a work-in-progress document of the skills that developers at Directi are expected to possess / develop. Granted that all developers at Directi do not possess all the skills listed herein. This document serves as a "skills-to-acquire" list for our existing team, as well as a reference list for aspiring applicants. As someone who wants to join our organization, you should have several of these mastered, and be prepared to tackle the rest -

Capability Matrix

Skill Software Engineer (2+ yrs) Sr Software Engineer (4+ yrs) Tech Lead (8+ yrs) GM (10+ yrs)
Algorithmic skills
Understand and dissect complex problems quickly Must have Must have Must have Must have
Understand trade-offs between space / time complexity Must have Must have Must have Must have
Come up with solutions with minimal space / time complexity Should have Must have Must have Must have
Reasonably mathematically savvy Bonus Bonus Should have Should have
Familiarity with graph theory, graph traversals etc Bonus Bonus Should have Should have
Data Structures
Basic Knowledge of data structures - Hashmaps, Binary tree, B-Tree, B+Tree, Linked Lists etc Should have Must have Must have Must have
Understanding of trade-offs between various data structures etc Should have Must have Must have Must have
Advanced Knowledge of implementation of data structures - Hashmaps, Binary tree, B-Tree, B+Tree, Linked Lists etc Should have Should have Must have Must have
RDBMS
Basic RDBMS knowledge Must have Must have Must have Must have
Advanced RDBMS knowledge Should have Should have Must have Must have
Query optimization Should have Should have Must have Must have
RDBMS tuning Should have Should have Must have Must have
Replication and Clustering Should have Should have Must have Must have
RDBMS Scalability Should have Should have Must have Must have
Caching
Basic knowledge of caching Should have Must have Must have Must have
Advanced caching strategies Should have Should have Must have Must have
Design and modeling
Strong knowledge of OOPs Must have Must have Must have Must have
Design patterns and application thereof Should have Must have Must have Must have
Understanding of KISS, YAGNI, DRY, SOC, SRP, Loose Coupling etc Should have Must have Must have Must have
Networking
Basic knowledge of DNS Should have Must have Must have Must have
Protocol level understanding of TCP / UDP Should have Should have Must have Must have
Deep understanding of OSI stack Should have Should have Should have Must have
Basic understanding of Routing concepts Should have Should have Should have Must have
Socket programming
Ability to implement a protocol server/client Should have Must have Must have Must have
Ability to write high performance server/client Should have Should have Must have Must have
Understanding of Async I/O Should have Should have Must have Must have
Understanding of various network protocols Should have Should have Should have Must have
Web application development
Basic HTML and CSS Must have Must have Must have Must have
Basic Javascript Should have Must have Must have Must have
Protocol level knowledge of HTTP Should have Must have Must have Must have
Advanced HTML and CSS Should have Should have Must have Must have
Advanced Javascript Should have Should have Must have Must have
Ajax / Flex Should have Must have Must have Must have
Understanding of MVC architecture Should have Must have Must have Must have
Multi-threading and concurrency
Basic knowledge of multi-threading Must have Must have Must have Must have
Advanced knowledge of multi-threading / trade-offs Should have Must have Must have Must have
Automated Testing
Understanding of unit testing Should have Must have Must have Must have
TDD Should have Must have Must have Must have
Writing code conducive to Automated testing Should have Must have Must have Must have
Planning and writing functional tests Should have Must have Must have Must have
Planning and writing stress tests Should have Should have Must have Must have
Knowledge of unit and functional testing frameworks for relevant platforms Should have Should have Must have Must have
OS Concepts
Understanding of OS concepts, kernel, interrupts, native libraries etc Bonus Bonus Should have Must have
Understanding of OS process scheduling concepts Bonus Bonus Should have Must have
IPC / RPC / Web Services
Knowledge of different forms of IPC / RPC Should have Must have Must have Must have
Knowledge of various protocols involved and trade-offs Should have Should have Must have Must have
Basic implementation knowledge of any one RPC mechanism Should have Must have Must have Must have
Advanced knowledge of SOAP / REST / other remoting Should have Must have Must have Must have
Security
Knowledge of OWASP Bonus Should have Must have Must have
Knowledge of Network layer security Bonus Bonus Must have Must have
Knowledge of secure architectures Bonus Bonus Should have Must have
Internationalization
Knowledge of Unicode and its implementations Bonus Should have Must have Must have
Knowledge of implementation of internationalized interfaces Bonus Should have Must have Must have
Understand implications of internationalized data in RDBMS, searches, indexing etc Bonus Should have Must have Must have
Development Methodologies
Knowledge of Agile, XP, Scrum, TDD and pairing Bonus Should have Must have Must have
Knowledge of Identifying code smells and Refactoring Should have Must have Must have Must have
Scaling
Write and plan stress tests to determine scalability Bonus Bonus Must have Must have
Ability to identify scalability and performance bottlenecks quickly Bonus Bonus Must have Must have
Ability to determine whether an application is / will be disk bound, memory bound, cpu bound, network bound etc Bonus Bonus Must have Must have
Understanding of all layers from the hardware to the application to determine bottlenecks Bonus Bonus Must have Must have
Knowledge of scaling techniques on the application side such as Async IO, caching, multi-threading etc Bonus Bonus Must have Must have
Knowledge of scaling techniques on the data side such as Identifying optimized data structures, caching strategies, Horizontal / Vertical partitioning, replication / clustering Bonus Bonus Must have Must have
Knowledge of scaling techniques on the app server side such as clustering and load balancing Bonus Bonus Must have Must have
System Administration
Basic Unix commands and shell operation (including grep, awk, sed, regex and shell / perl scripting) Bonus Should have Must have Must have
Basic Windows administration Bonus Should have Must have Must have
Usability
Knowledge of information architecture Bonus Should have Must have Must have
Ability to design intuitive UI Bonus Should have Must have Must have
Communication Skills
Good grammar - written and oral Must have Must have Must have Must have
Ability to understand discussions well Must have Must have Must have Must have
Ability to articulate a concept / subject well Must have Must have Must have Must have
Good command over vocabulary Should have Should have Must have Must have
Penchant for Writing
Frequently writes internal / external documents / articles Should have Must have Must have Must have
Conducts internal and external training sessions Should have Should have Must have Must have
Penchant for reading
Avid reader of tech and industry blogs, articles, news and books etc Must have Must have Must have Must have
Strategy and Vision
Business acumen Bonus Bonus Must have Must have
Ability to determine features and product strategy Bonus Bonus Must have Must have
Platform Selection
Ability to select languages, OS, RDBMS, Data structures, Frameworks, libraries, Hardware for an application Bonus Bonus Must have Must have
Understand performance, cost and other trade-offs between myriad platform choices Bonus Bonus Must have Must have
Architecture
Understanding of deployment architectures and their trade-offs Bonus Bonus Must have Must have
Capacity Planning
Ability to plan and conduct capacity planning exercises Bonus Bonus Must have Must have
Soft Skills
Likeable / people's person Should have Must have Must have Must have
Ability to garner respect amongst peers by demonstrable knowledge and actions Should have Must have Must have Must have
Proactive mentor who loves to impart and share knowledge Should have Must have Must have Must have
Attract and Recruit 'A' players Bonus Bonus Must have Must have
Train and grow team Bonus Bonus Must have Must have
Contribute to process evolution Bonus Bonus Must have Must have
Motivate and inspire the team Bonus Bonus Must have Must have
Product Evangelism
Frequently blog Bonus Should have Must have Must have
Misc
Humility Must have Must have Must have Must have

Labels

 
 

Life@Directi


From Blogs & Wikis

Directi Presentations

General Wikis

Directi Univ Wikis

Company Blogs

Businesses


TechCamp
Home.pw - Chat and collaboration for companies and individuals. LogicBoxes - Registry & Registrar Solutions ResellerClub - Domain Reseller, Domain Name Reseller, Cheap Domain Reseller - Resellers Skenzo - Exclusive Traffic Monetization Programs WebHosting - Web Hosting Information CodeChef - Online Programming Competition
All content in the Directi Wiki is licensed under a Creative Commons Attribution-Share Alike 3.0 License.