gwn, 1988

Mail: dev@gwn.wtf  
GPG Key: 1BEA 3B99 A160 20C3 571F  5ABB 4865 13F4 6C66 EF31  
Github: gwn  
Gitlab: gwn  
HN: gwn7  
Lobsters: gwn  
Twitter: technohipster42  
Linkedin: linkedin.com/in/gwn


## toc
- sum
- xp
- stack
- trivia


## sum

Hacker, full stack developer, product engineer, with 10+ years of
experience and an academic background of philosophy.

- Developing full stack web & mobile apps
- Building on top of Node, React, React Native, Postgres
- Working with data using classic UNIX tools and Python
- Administering Debian / CentOS Linux (and derivatives)
- Scaling with AWS, Google Cloud, Heroku, or custom means
- Implementing real time comms features with WebRTC
- Building dApps on top of the Ethereum blockchain

My specialty is to build 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.


## xp

Projects listed below are initially completely developed by me,
then handed off to teams I helped build; unless otherwise noted.

I'm not listing incomplete and private projects so the items below
are not my only product experience.

- [BiLira][0], 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

[0]: https://bilira.co/en-us/home


- [Apres][1], 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.

[1]: https://apres.io


- [Uservision][2], 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

[2]: http://user.vision


- [Keynumbers][3], 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

[3]: https://keynumbers.com


- [Lord of the Feeds][4], 2016, automation, Istanbul

  - Company: I developed LOTF while I was working as an employee
    in the travel marketing science company
    [Adphorus](https://adphorus.com).

  - 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][5] which acquired Adphorus in 2017.

[4]: https://adphorus.com
[5]: https://www.sojern.com


- 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][6], 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

[6]: https://semtr.com/en


- [Aloha Turkey Online Platform][7], 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

[7]: https://alohama.com


- [4C Music][8], 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

[8]: http://4cmusic.com


## stack

### philosophy

                   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)


### what you will get

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.


#### backend

- DB: [Postgres][9]

    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.

[9]: https://postgresql.org


- DB Migrations: [Postgrator][10] + [Migra][11]

    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.

[10]: https://github.com/rickbergfalk/postgrator
[11]: https://github.com/djrobstep/migra


- Data Access & Manipulation: [Massive][12]

    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.

    https://youtu.be/wgoPa5Kn0n0

[12]: https://massivejs.org


- API Framework: [Fastify][13]

    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.

[13]: https://fastify.io


#### frontend

- Framework: [React][14]

    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.

[14]: https://reactjs.org


- Routing: [Router5][17] and [Navigation][18]

    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:

    - https://medium.com/@graham.mendick/navigation-in-react-native-is-broken-ba5b1f245eb8
    - https://medium.com/@graham.mendick/three-apps-for-the-price-of-one-3f740f6918ed

[17]: https://router5.js.org
[18]: http://grahammendick.github.io/navigation/


- State Management: [Unstated][19] and [Zustand][20]

    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][19] which is basically a
    hook-driven version of Unstated, as hooks (unfortunately)
    became *the way* of doing things in React.

[19]: https://github.com/jamiebuilds/unstated
[20]: https://zustand.surge.sh/


- API Calls: [React Refetch][21] and [SWR][22]

    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 [SWR][21] which is basically a
    hook-driven version of React Refetch, as hooks (unfortunately)
    became *the way* of doing things in React.

[21]: https://github.com/heroku/react-refetch
[22]: https://swr.vercel.app/


- Form Management: [Formik][23]

    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.

[23]: https://jaredpalmer.com/formik/


- Dataviz: [React-Vis][24]

    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.

[24]: https://uber.github.io/react-vis/


- Styling: [CSS-Modules][25]

    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!!

[25]: https://github.com/css-modules/css-modules


- SSR: [Razzle][26]

    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).

[26]: https://github.com/jaredpalmer/razzle


## trivia

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 ..

- type faster than you
- know a lot of funny jazz chords
- am a regular water faster
- once published a philosophy magazine
- know a lot about good nutrition
- can probably beat you in tennis
- have a twin sister
- love avocados
- am not passionate about technology (!) (just a tool it is)
- speak a bit French :)