gwn, 199?
Hacker, full stack developer, product engineer, with 15+ years of professional experience and an academic background of philosophy.
My technical specialty is building simple systems with few moving parts that contain as little accidental complexity as possible. I find this to be a requirement for success in today’s crazy tech ecosystem. I don’t easily buy the hype nor subscribe to every new shiny tool & paradigm. Check out below the “xp” section for my professional background, “stack” section for information on my default technology choices, and “trivia” section for more detailed & less formal information about myself.
My business specialty is caring greatly about understanding your domain, business model, figuring out your product priorities and actually iterating fast. In a world where the majority of software projects fail and the majority of engineering hires disappoint, I am promising you the peace of mind of knowing that you have an actually capable engineer beside you who understands your business model, cares about your investment and is able to make good judgements.
Feel free to contact if you don't have the luxury of failure.
Products listed below are initially completely developed by me, then handed off to teams I helped build; unless otherwise noted.
Note I: This section is outdated since 2021. I've been offering my services via my agency since. See lab to check it out.
Note II: The items below are far from showing my complete experience. I removed a lot of relatively insignificant ones for brevity. I'm also naturally unable to list private projects (sorry, NDAs!!).
Company: Architecting cybernetic solutions for the distributed economy
Project: Web client for the API3 DAO. Please check out API3 at https://api3.org and the open source project at https://github.com/api3dao/api3-web-client.
Tech: Javascript, React, Ethers
ixo, 2020-2021, blockchain, Vaduz
Company: An Internet for sensing and verifying changes in the state of the world
Project: Client SDK and mobile client for the ixo project. Check out the open source projects at https://github.com/ixofoundation/ixo-client-sdk and https://github.com/gwn/ixo-app
Tech: Javascript, React Native, Cosmos
BiLira, 2019-2020, fintech, Istanbul
Company: BiLira is Turkey’s first TRY backed stable cryptocurrency built on the Ethereum network; issued and managed by the BiLira organization.
Project: A protected dashboard for BiLira buyers & sellers, KYC verification, issuance & redemption & swapping of BiLira, wallet to wallet transactions, integration with 3rd party wallet provider services, global exchanges, payment systems, and other tools in the decentralized finance ecosystem.
Tech: Javascript, React, React Native, Node, Fastify, Postgres, Ethereum, Hydra OAuth2 Server
Apres, 2018, automation, San Francisco
Company: Apres is an API for human automation, an on-demand workforce anyone can program. The software integrates an on-demand, virtual workforce to complete structured tasks, managed for quality.
Project: Protected customer & worker dashboards enabling the ordering & implementation of tasks such as data enrichment/annotation, OCR transcription, categorization, comparison, and data collection.
Tech: Javascript, React
Notes: I was the frontend lead on this one, and a separate backend team was already available.
Uservision, 2018, user experience research, Istanbul
Company: Uservision provides remote crowdsourced UX testing and market research solutions for organizations with digital business operations. The company provides marketers, developers, product managers, and UX designers on-demand access to people in their target audience which are utilised to provide qualitative and quantitative intelligence.
Project: Protected researcher & marketer dashboards featuring remote focus groups, UX testing, ad testing.
Tech: Javascript, Node, React, Postgres, WebRTC
Keynumbers, 2017, knowledge management, Sydney
Company: Keynumbers is a web application that serves as graph powered knowledge curation and decision making tool.
Project: A small dashboard backed by the Neo4J graph database that allowed its users to build small pipelines and make arbitrary arithmetic between different datasets to reach insights, in an easy to use drag and drop interface. A bit hard to explain just with words, really. One of the more interesting and enjoyable projects in my career.
Tech: Javascript, Vue, Neo4J
Lord of the Feeds, 2016, automation, Istanbul
Company: I developed LOTF while I was working as an employee in the travel marketing science company Adphorus.
Project: A generic feed transformer app that enables its users to collect feeds from different sources, build pipelines to transform them according to predefined rules and save the results in target locations.
Features are transformations between different feed formats (CSV / TSV, XML), row & field mapping / reducing / filtering, duplicate removal, and automatic image transformation (if the field contains an image URL).
Tech: Python, Postgres, Redis, Celery, AWS Lambda, Javascript, Vue
Notes: I heard this is still (as of 2019) in heavy use at Adphorus and Sojern which acquired Adphorus in 2017.
Adsuit, 2015, digital marketing, Istanbul
Company: Adsuit was a digital marketing platform that ran on top of the App Nexus platform.
Project: Protected publisher & advertiser dashboards with interfaces for campaign creation, campaign administration, and placements.
Tech: PHP, Laravel, Javascript, Angular, Mysql, App Nexus API
Real time e-commerce dashboard, 2014, business intelligence, Istanbul
Company: I built this while I was an employee for SEM, one of the biggest digital marketing agencies in Turkey.
Project: A protected dashboard for retail executives that visualizes sales real time with fancy animations, and allows for time & category based filtering & grouping.
Tech: Python, Javascript, D3, Postgres, Google Analytics & Adwords APIs
Aloha Turkey Online Platform, 2012, online education, Istanbul
Company: Aloha Turkey is the Turkey branch of the Aloha network, which develops mental arithmetic and brain development programs.
Project: Protected dashboards for students & teachers that featured interfaces for lessons, examples, grades, and messaging.
Tech: PHP 5, Symfony, Javascript, jQuery
4C Music, 2009, e-commerce, Istanbul
Company: 4C Music is a wholesale and retail supplier for musical instruments and accessories, focused on guitars. They were the official distributor of Fender, Ibanez and Cort guitars in Turkey at the time.
Project: A complete custom-made e-commerce system
Tech: PHP 5, Javascript, MySQL, SQL Server
Boring
.
x .
.
Mainstream . . . . . . . Eccentric
.
.
.
Hyped
My technical decision making principles:
Stick with the mainstream & boring unless a competing alternative that is so much simpler and/or more powerful, and that has an acceptable learning curve, so that it will justify leaving the flock, exists.
Stay away from tech that is overkill for current needs and always favor the simplest solution available that does the job.
Favor solutions that the average Javascript developer can quickly understand, easily pick up and extend. Never bet on solutions with very steep learning curves no matter how elegant they may be. (Best example is advanced functional programming, which is the biggest and the most attractive trap in Javascript)
Below are listed the tools that are part of my current stack, along with a paragraph that shortly explains the reasons they were chosen for.
A project’s stack is always tailored according to its specific needs, but below are my default choices.
DB: Postgres
Postgres is the best general purpose open source database available in the market. Being an ACID RDBMS, it natively guarantees data integrity (which is usually very important) as opposed to NoSQL options such as MongoDB (which is an overly-hyped alternative that is unfit to be a primary database for most serious projects; mostly made popular by people who don’t have time or motivation to learn RDBMSs.)
Good use of modern SQL on top of a fully featured database like Postgres can simplify many complex problems that traditionally required backend devs to write lines and lines of ugly code in the application layer.
I love Postgres from its command line client to its rich data types, to its foreign data wrappers. A really a good and reliable piece of tech.
DB Migrations: Postgrator + Migra
Migrations are a pain in the ass and everybody knows that. MongoDB owes its popularity to this fact.
But if you want a reliable system migrations are a necessary evil.
But actually what’s evil is not the migrations. Migrations is a solution to an inherently complex problem and it’s fine.
What’s evil is the tooling, mostly. Most migration tools add unnecessary additional complexity to this already inherently complex problem.
In my opinion; the combination of a database schema diff tool with a raw SQL migration manager is the most elegant solution to the database migration problem. This database diffing approach is sometimes called “state driven database delivery” and works great.
Data Access & Manipulation: Massive
Massive is a library for talking to Postgres databases that offers an experience comparable to the one that ORMs offer; without having their many downsides (Just ask any backend dev about ORMs). It’s both simple, performant and easy of use; which is a combination very hard to find in the database library space. Just lovely.
Update: Replaced with bare pg and bare SQL
API Framework: Fastify
Fastify is one of the fastest and modern frameworks for creating mostly REST style APIs. The project is well designed and small, yet offers many of the important features an API developer would need.
Update: I no longer use Fastify a lot. Actually I no longer typically use frameworks. But I use their parts as necessary
Framework: React
Well, React is great and you know that. The fact that the React ecosystem, most of the React developers, and the direction the React team is going to is shitty doesn’t change that. A React app flourishes under talented & experienced hands that that understands simplicity and don’t buy the hype.
Routing: Router5 and Navigation
Router5 is a framework agnostic router (means that it can be used in non-React projects as well) that gets everything right about routing. It is so much better designed and more useful (especially in non-trivial scenarios) than the standard go to option React Router.
The Navigation router is a fine router for React Native. Although it is not mainstream and its API has considerable room for improvement; the features it offer are great compared to its competitors React Navigation and React Native Navigation. See the following articles from the library author for more info:
State Management: Unstated and Zustand
Unstated is one of the simplest yet powerful state management tools for React. It is a direct competitor to Redux, which is by comparison a beast in complication and verbosity. Redux is of course useful but its use can only be justified for very large projects. For others; the complication of the reducer pattern is definitely not worth it; and Unstated is there to remind us that global state conceptually is just like a React component state except that it can be reached from anywhere, and it doesn’t have to be more complicated than that. Saves us from a lot of (self-inflicted) pain. Ah, accidental complexity.
Update: Lately replaced by Zustand which is basically a hook-driven version of Unstated, as hooks (unfortunately) became the way of doing things in React.
API Calls: React Refetch and React Query
React Refetch is a helper library that makes possible for React components to declaratively make API calls and injects the responses into the component. It handles caching, fetch states, non-fetch async operations, reloading, etc… It’s actually the predecessor of the much loved Apollo client. And it is here to remind us that you don’t need to learn what a “saga” is to just make a bloody API call.
Update: Lately replaced by React Query which is basically a hook-driven version of React Refetch, as hooks (unfortunately) became the way of doing things in React.
Form Management: Formik
Formik is one of the most popular libraries that solve the “form problem” in the React ecosystem.
Pretty standard, really. Easy to use, straightforward, and much more popular than its closest competitor, React final form.
I don’t even want to talk about the solutions that send form states to Redux or whatever global state manager. Common sense, people, please.
React-Vis is a simple and flexible data visualization library for React by Uber that is built on top of the popular D3 data visualization library. Simple, composable; a great D3 wrapper for React that strikes the right balance. Achieves to remain being a simple but useful D3 wrapper; and doesn’t invent an unncessary and overly complex API layer on top of it. What a great feature.
Update: Lately replaced by Visx as React Vis unfortunately isn’t maintained anymore. Visx is a bit lower level than I prefer, but it offers great power and flexibility and it’s worth paying the lower level implementation price in most scenarios.
Styling: CSS-Modules
People are inventing whole new approaches to styling apps these days, but plain old CSS works still great. CSS Modules is just a small tool to scope sets of styling rules to individual components to prevent id & class name conflicts between components.
Styled components? No thank you. It is hard to forgive it for popularizing the “spaghetti CSS” approach to React codebases. While this can be defended in the name of pragmatism; I never felt the need to reach to this to this day.
The CSS module approach work in React Native as well. The styles can be imported from a separate module. And because there is no “class” concept in React Native, styles that should react to some input can be exported as memoized functions instead of as POJOs. Works like a charm, without bloated deps!!
SSR: Razzle
SSR is required for Google-able, marketable, content-first websites. There is no denying that.
Razzle is a good solution that offers SSR capabilities without being a full framework (like Next.js).
I am that stereotypical know-it-all hacker who touch types in Arch Linux with the lights off, follows Suckless, has the coolest UNIX environment ever, sends encrypted email from Mutt, does in VIM in three keystrokes stuff that takes your twenty clicks and two plugin installs in VSCode, hangs out in IRC and the Gopherspace, talks about the UNIX philosophy, Plan 9, OpenBSD, advocates plain text emails, attacks ORMs, writes Webpack configs from scratch, sometimes rewrites them with Make just to fuck with fellow developers, frequently argues about naming things, proper Git messages, preaches about simplicity, orthogonality, minimalism, premature optimization, proper interfaces, dislikes Git Flow, talks about React hooks being shitty, CSS forward compatibility, aggressively removes inessential dependencies and code regularly, knows about super weird Git flags, generates flow charts from GraphViz Dot, collects weird keyboards, etc, etc.. Your typical senior opinionated web generation nerd with a command line fetish (or should I say, ergonomics?).
Good thing is that I also happen to know how to fucking ship products. My challenge has always been to combine my ultra nerdy attitude with a pragmatic approach. “worse is better”, “boring technology”, KISS, YAGNI, Pareto analysis, bla, bla. That has always been a requirement for my survival in my heavily product and startup oriented career.
More trivia:
I ..